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); }
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); } } }
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."); } }
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); } } }
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); }
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 }); }
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."); } } } }