Пример #1
0
        private LttProducerWorkerInfo CreateWorkerInfo(ProducerInitializationParameters initParam, long lttReadIntervalMinutes)
        {
            // Create a new worker object
            this.traceSource.WriteInfo(
                this.logSourceId,
                $"Creating Ltt producer worker object for {initParam.ApplicationInstanceId}");

            LttProducerWorkerInfo workerInfo = new LttProducerWorkerInfo();

            this.AddLttProducerWorkerToWorkerInfo(workerInfo, initParam, lttReadIntervalMinutes);

            return(workerInfo);
        }
Пример #2
0
 private void CreateWindowsFabricLttProducerWorkerInfo(
     ProducerInitializationParameters initParam,
     long lttReadIntervalMinutes)
 {
     lock (ProducerWorkerLock)
     {
         if (LttProducer.ProducerWorkerInfo == null)
         {
             LttProducer.ProducerWorkerInfo = this.CreateWorkerInfo(initParam, lttReadIntervalMinutes);
         }
         else
         {
             this.UpdateWorkerInfo(LttProducer.ProducerWorkerInfo, initParam, lttReadIntervalMinutes);
         }
     }
 }
Пример #3
0
        private void AddLttProducerWorkerToWorkerInfo(LttProducerWorkerInfo workerInfo, ProducerInitializationParameters initParam, long lttReadIntervalMinutes)
        {
            LttProducerWorker.LttProducerWorkerParameters parameters = CreateLttProducerWorkerParameters(workerInfo, initParam, lttReadIntervalMinutes);

            try
            {
                LttProducerWorker newWorker = new LttProducerWorker(parameters);
                workerInfo.LttProducers.Add(this);
                workerInfo.ProducerWorker = newWorker;
            }
            catch (InvalidOperationException)
            {
                this.traceSource.WriteError(
                    this.logSourceId,
                    "Failed to restart Ltt producer worker object.");
            }
        }
Пример #4
0
 private void CreateAppProducerWorkerInfo(
     ProducerInitializationParameters initParam,
     long lttReadIntervalMinutes)
 {
     lock (AppProducerWorkersLock)
     {
         if (!LttProducer.AppProducerWorkersInfos.ContainsKey(initParam.ApplicationInstanceId))
         {
             LttProducerWorkerInfo workerInfo = CreateWorkerInfo(initParam, lttReadIntervalMinutes);
             LttProducer.AppProducerWorkersInfos.Add(initParam.ApplicationInstanceId, workerInfo);
         }
         else
         {
             this.UpdateWorkerInfo(
                 LttProducer.AppProducerWorkersInfos[initParam.ApplicationInstanceId],
                 initParam,
                 lttReadIntervalMinutes);
         }
     }
 }
Пример #5
0
        private void UpdateWorkerInfo(LttProducerWorkerInfo workerInfo, ProducerInitializationParameters initParam, long lttReadIntervalMinutes)
        {
            // Existing worker object is available.
            this.traceSource.WriteInfo(
                this.logSourceId,
                $"Existing Ltt producer worker object. Restarting the worker object now for {initParam.ApplicationInstanceId}");

            // Save the old value for comparision
            long oldLttReadIntervalMinutes = workerInfo.ProducerWorker.LttReadIntervalMinutes;

            // Restart the worker object
            workerInfo.ProducerWorker.Dispose();
            workerInfo.ProducerWorker = null;

            // Keep the smaller value intact
            // as this worker handles both producers Ltt trace conversion and table events
            if (oldLttReadIntervalMinutes < lttReadIntervalMinutes)
            {
                lttReadIntervalMinutes = oldLttReadIntervalMinutes;
            }

            this.AddLttProducerWorkerToWorkerInfo(workerInfo, initParam, lttReadIntervalMinutes);
        }
Пример #6
0
        private LttProducerWorker.LttProducerWorkerParameters CreateLttProducerWorkerParameters(LttProducerWorkerInfo workerInfo, ProducerInitializationParameters initParam, long lttReadIntervalMinutes)
        {
            List <LttProducer> lttProducers = new List <LttProducer>(workerInfo.LttProducers)
            {
                this
            };

            return(new LttProducerWorker.LttProducerWorkerParameters()
            {
                TraceSource = this.traceSource,
                LogDirectory = initParam.LogDirectory,
                WorkDirectory = initParam.WorkDirectory,
                ProducerInstanceId = this.logSourceId,
                LttProducers = lttProducers,
                LatestSettings = initParam,
                LttReadIntervalMinutes = lttReadIntervalMinutes
            });
        }
Пример #7
0
        public LttProducer(
            DiskSpaceManager diskSpaceManager,
            ITraceEventSourceFactory traceEventSourceFactory,
            ProducerInitializationParameters initParam)
        {
            this.logSourceId           = string.Concat(initParam.ApplicationInstanceId, "_", initParam.SectionName);
            this.traceSource           = traceEventSourceFactory.CreateTraceEventSource(FabricEvents.Tasks.FabricDCA);
            this.serviceConfigSections = new List <string>();
            this.consumerSinks         = initParam.ConsumerSinks;

            // Read the timer config value from dca section
            var  configReader = new ConfigReader(initParam.ApplicationInstanceId);
            long newLttReadIntervalMinutes = configReader.GetUnencryptedConfigValue(
                initParam.SectionName,
                LttProducerConstants.LttReadIntervalParamName,
                LttProducerConstants.DefaultLttReadIntervalMinutes);

            lock (ProducerWorkers)
            {
                LttProducerWorkerInfo workerInfo = ProducerWorkers.FirstOrDefault();
                if (null != workerInfo)
                {
                    // Existing worker object is available.
                    this.traceSource.WriteInfo(
                        this.logSourceId,
                        "Existing Ltt producer worker object. Restarting the worker object now.");

                    // Save the old value for comparision
                    long oldLttReadIntervalMinutes = workerInfo.ProducerWorker.LttReadIntervalMinutes;

                    // Restart the worker object
                    workerInfo.ProducerWorker.Dispose();
                    workerInfo.ProducerWorker = null;

                    // Keep the smaller value intact
                    // as this worker handles both producers Ltt trace conversion and table events
                    if (oldLttReadIntervalMinutes < newLttReadIntervalMinutes)
                    {
                        newLttReadIntervalMinutes = oldLttReadIntervalMinutes;
                    }

                    List <LttProducer> LttProducers = new List <LttProducer>(workerInfo.LttProducers)
                    {
                        this
                    };
                    LttProducerWorker.LttProducerWorkerParameters newWorkerParam = new LttProducerWorker.LttProducerWorkerParameters()
                    {
                        TraceSource            = this.traceSource,
                        LogDirectory           = initParam.LogDirectory,
                        ProducerInstanceId     = this.logSourceId,
                        LttProducers           = LttProducers,
                        LatestSettings         = initParam,
                        LttReadIntervalMinutes = newLttReadIntervalMinutes
                    };
                    try
                    {
                        LttProducerWorker newWorker = new LttProducerWorker(newWorkerParam);
                        workerInfo.LttProducers.Add(this);
                        workerInfo.ProducerWorker = newWorker;
                    }
                    catch (InvalidOperationException)
                    {
                        this.traceSource.WriteError(
                            this.logSourceId,
                            "Failed to restart Ltt producer worker object.");
                    }
                }
                else
                {
                    // Create a new worker object
                    this.traceSource.WriteInfo(
                        this.logSourceId,
                        "Creating Ltt producer worker object ...");

                    List <LttProducer> LttProducers = new List <LttProducer> {
                        this
                    };
                    LttProducerWorker.LttProducerWorkerParameters newWorkerParam = new LttProducerWorker.LttProducerWorkerParameters()
                    {
                        TraceSource            = this.traceSource,
                        LogDirectory           = initParam.LogDirectory,
                        ProducerInstanceId     = this.logSourceId,
                        LttProducers           = LttProducers,
                        LatestSettings         = initParam,
                        LttReadIntervalMinutes = newLttReadIntervalMinutes
                    };
                    try
                    {
                        LttProducerWorker newWorker = new LttProducerWorker(newWorkerParam);
                        workerInfo = new LttProducerWorkerInfo()
                        {
                            LttProducers   = new List <LttProducer>(),
                            ProducerWorker = newWorker
                        };
                        workerInfo.LttProducers.Add(this);
                        ProducerWorkers.Add(workerInfo);
                    }
                    catch (InvalidOperationException)
                    {
                        this.traceSource.WriteError(
                            this.logSourceId,
                            "Failed to create Ltt producer worker object.");
                    }
                }
            }
        }