/// <summary> /// Returns a ComponentRunState with any existing error queues, so that they can be persisted through /// AppDomain reloads. /// </summary> public ComponentRunState GetRunState() { ComponentRunState runState = new ComponentRunState(GetComponentName()); Dictionary <string, Dictionary <string, MessageQueue> > errorQueues = NodeManager.Instance.GetErrorQueues(); ErrorQueueState state = new ErrorQueueState { ErrorQueues = errorQueues }; runState.SerializedState = MySpace.Common.IO.Serializer.Serialize(state, false); return(runState); }
/// <summary> /// this (or <see cref="ReloadConfig"/>) gets called (depending) when the TypeSettings.Config file /// are changed. /// </summary> /// <remarks> /// Added: craigbro /// cachedTypeSettings now held with the forwarder for reference of /// exceptions on Synchronous "in" messages. /// To reload, we just null out the cached TypeSettingsCollection object and the /// accessor will reload it on next call /// While ConfigurationManager.GetSection is quite performant after the 1st hit, /// keeping them cached is about twice as fast. /// </remarks> /// <param name="config"></param> /// <param name="runState"></param> private void LoadConfig(RelayNodeConfig config, ComponentRunState runState) { if (config != null) { if (config.RelayComponents != null) { object configObject = config.RelayComponents.GetConfigFor(GetComponentName()); ForwardingConfig forwardingConfig = configObject as ForwardingConfig; if (forwardingConfig == null) { if (log.IsInfoEnabled) { log.Info("No forwarding configuration supplied. Using defaults."); } forwardingConfig = new ForwardingConfig(); } NodeManager.Initialize(config, forwardingConfig, GetErrorQueues(runState)); TypeSettingCollection typeSettingCollection = null; if (NodeManager.Instance.Config != null) { if (NodeManager.Instance.Config.TypeSettings != null) { typeSettingCollection = NodeManager.Instance.Config.TypeSettings.TypeSettingCollection; } } TypeSpecificStatisticsManager.Initialize(typeSettingCollection); _enableAsyncBulkGets = forwardingConfig.EnableAsyncBulkGets; _myNodeDefinition = NodeManager.Instance.GetMyNodeDefinition(); _myZone = Node.DetermineZone(_myNodeDefinition); short maxTypeId = 0; if (config.TypeSettings != null) { maxTypeId = config.TypeSettings.MaxTypeId; } DebugWriter.SetTraceSettings(maxTypeId, forwardingConfig.TraceSettings); DebugWriter.WriteCallingMethod = forwardingConfig.WriteCallingMethod; DebugWriter.WriteMessageTrace = forwardingConfig.WriteMessageTrace; } else { NodeManager.Initialize(null, null, null); TypeSpecificStatisticsManager.Initialize(null); } } else { NodeManager.Initialize(null, null, null); TypeSpecificStatisticsManager.Initialize(null); } }
/// <summary> /// this (or <see cref="ReloadConfig"/>) gets called (depending) when the TypeSettings.Config file /// are changed. /// </summary> /// <remarks> /// Added: craigbro /// cachedTypeSettings now held with the forwarder for reference of /// exceptions on Synchronous "in" messages. /// To reload, we just null out the cached TypeSettingsCollection object and the /// accessor will reload it on next call /// While ConfigurationManager.GetSection is quite performant after the 1st hit, /// keeping them cached is about twice as fast. /// </remarks> /// <param name="config"></param> /// <param name="runState"></param> private void LoadConfig(RelayNodeConfig config, ComponentRunState runState) { if (config != null) { if (config.RelayComponents != null) { object configObject = config.RelayComponents.GetConfigFor(GetComponentName()); ForwardingConfig forwardingConfig = configObject as ForwardingConfig; if(forwardingConfig == null) { if(_log.IsInfoEnabled) { _log.Info("No forwarding configuration supplied. Using defaults."); } forwardingConfig = new ForwardingConfig(); } NodeManager.Initialize(config, forwardingConfig, GetErrorQueues(runState)); _enableAsyncBulkGets = forwardingConfig.EnableAsyncBulkGets; _myNodeDefinition = NodeManager.Instance.GetMyNodeDefinition(); short maxTypeId = 0; if(config.TypeSettings != null) { maxTypeId = config.TypeSettings.MaxTypeId; } DebugWriter.SetTraceSettings(maxTypeId,forwardingConfig.TraceSettings); DebugWriter.WriteCallingMethod = forwardingConfig.WriteCallingMethod; DebugWriter.WriteMessageTrace = forwardingConfig.WriteMessageTrace; } else { NodeManager.Initialize(null, null, null); } } else { NodeManager.Initialize(null, null, null); } }
/// <summary> /// Initializes and starts the component. /// </summary> /// <param name="config">The configuration to use.</param> /// <param name="runState">Component Run State</param> public void Initialize(RelayNodeConfig config, ComponentRunState runState) { LoggingUtil.Log.Info("Initializing CacheIndexV3Storage"); storeContext.InitializeReloadConfig(config, true); }
/// <summary> /// Initializes the component. Any error queues in runState will be reinstantiated. /// </summary> public void Initialize(RelayNodeConfig config, ComponentRunState runState) { LoadConfig(config, runState); _initDate = DateTime.Now; }
private static Dictionary <string, Dictionary <string, MessageQueue> > GetErrorQueues(ComponentRunState runState) { if (runState == null || runState.SerializedState == null) { return(null); } try { MemoryStream stream = new MemoryStream(runState.SerializedState); ErrorQueueState state = MySpace.Common.IO.Serializer.Deserialize <ErrorQueueState>(stream, false); if (state != null) { return(state.ErrorQueues); } return(null); } catch (Exception ex) { if (_log.IsErrorEnabled) { _log.ErrorFormat("Exception getting Error Queues from Run State: {0}", ex); } return(null); } }
private static Dictionary<string, Dictionary<string, MessageQueue>> GetErrorQueues(ComponentRunState runState) { if (runState == null || runState.SerializedState == null) return null; try { MemoryStream stream = new MemoryStream(runState.SerializedState); ErrorQueueState state = MySpace.Common.IO.Serializer.Deserialize<ErrorQueueState>(stream, false); if (state != null) return (state.ErrorQueues); return null; } catch (Exception ex) { if (_log.IsErrorEnabled) _log.ErrorFormat("Exception getting Error Queues from Run State: {0}", ex); return null; } }
/// <summary> /// Returns a ComponentRunState with any existing error queues, so that they can be persisted through /// AppDomain reloads. /// </summary> public ComponentRunState GetRunState() { ComponentRunState runState = new ComponentRunState(GetComponentName()); Dictionary<string, Dictionary<string, MessageQueue>> errorQueues = NodeManager.Instance.GetErrorQueues(); ErrorQueueState state = new ErrorQueueState {ErrorQueues = errorQueues}; runState.SerializedState = MySpace.Common.IO.Serializer.Serialize(state, false); return runState; }
/// <summary> /// Returns a ComponentRunState with any existing error queues, so that they can be persisted through /// AppDomain reloads. /// </summary> public ComponentRunState GetRunState() { var runState = new ComponentRunState(GetComponentName()); return(runState); }
/// <summary> /// Initializes the component. Any error queues in runState will be reinstantiated. /// </summary> public void Initialize(RelayNodeConfig config, ComponentRunState runState) { LoadConfig(config); }
public void Initialize(BerkeleyDbConfig config, string InstanceName, ComponentRunState runState) { try { instanceName = InstanceName; #region Perf Counter init BerkeleyDbCounters.Instance.Initialize(InstanceName); storage = new BerkeleyDbStorage { TrickledPagesCounter = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes.PagesTrickled), DeletedObjectsCounter = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes.DeletedObjects), StoredObjectsCounter = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes.ObjectsStored), PooledBufferSizeCounter = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. PooledBufferSize), AllocatedBuffersCounter = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. AllocatedBuffers), BuffersInUseCounter = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes.BuffersInUse), LockStatCurrentMaxLockerId = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatCurrentMaxLockerId), LockStatLastLockerId = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLastLockerId), LockStatLockersNoWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockersNoWait), LockStatLockersWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockersWait), LockStatLockNoWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockNoWait), LockStatLocksWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLocksWait), LockStatLockTimeout = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockTimeout), LockStatLockWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockWait), LockStatMaxLockersPossible = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatMaxLockersPossible), LockStatMaxLockObjectsPossible = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatMaxLockObjectsPossible), LockStatMaxLocksPossible = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatMaxLocksPossible), LockStatMaxNumberLockersAtOneTime = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatMaxNumberLockersAtOneTime), LockStatMaxNumberLocksAtOneTime = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatMaxNumberLocksAtOneTime), LockStatNumberCurrentLockers = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberCurrentLockers), LockStatNumberCurrentLockObjects = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberCurrentLockObjects), LockStatNumberCurrentLockObjectsAtOneTime = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberCurrentLockObjectsAtOneTime), LockStatNumberCurrentLocks = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberCurrentLocks), LockStatNumberDeadLocks = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberDeadLocks), LockStatNumberLockModes = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberLockModes), LockStatNumberLocksDownGraded = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberLocksDownGraded), LockStatNumberLocksReleased = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberLocksReleased), LockStatNumberLocksRequested = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberLocksRequested), LockStatNumberLocksUpgraded = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberLocksUpgraded), LockStatNumberLockTimeouts = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberLockTimeouts), LockStatNumberTxnTimeouts = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatNumberTxnTimeouts), LockStatObjectsNoWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatObjectsNoWait), LockStatObjectsWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatObjectsWait), LockStatTxnTimeout = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatTxnTimeout), LockStatLockHashLen = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockHashLen), LockStatLockRegionSize = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLockRegionSize), LockStatLocksNoWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatLocksNoWait), LockStatRegionNoWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatRegionNoWait), LockStatRegionWait = BerkeleyDbCounters.Instance.GetCounter(GetInstanceName(), BerkeleyDbCounters.PerformanceCounterIndexes. LockStatRegionWait) }; if (storage.LockStatRegionWait == null) { Log.WarnFormat("Lock Statistics not initialized properly from BerkeleyDbComponent."); } else { Log.DebugFormat("Lock Statistics initialized properly from BerkeleyDbComponent."); } #endregion bdbConfig = config; storage.Initialize(InstanceName, bdbConfig); if (relayNodeConfig != null) { // tell database objects if they are to check for race conditions - Dale Earnhardt Jr. # 8 yes! DatabaseConfig dbConfig; foreach (TypeSetting typeSetting in relayNodeConfig.TypeSettings.TypeSettingCollection) { try { dbConfig = bdbConfig.EnvironmentConfig.DatabaseConfigs.GetConfigFor(typeSetting.TypeId); } catch (Exception e) { Log.ErrorFormat("Exception getting database config for type {0}: {1}", typeSetting.TypeId, e); throw; } if (dbConfig.Id == 0) { DatabaseConfig newDbConfig = dbConfig.Clone(typeSetting.TypeId); bdbConfig.EnvironmentConfig.DatabaseConfigs.Add(newDbConfig); } RaceConditionLookup[typeSetting.TypeId] = typeSetting.CheckRaceCondition; } } ThrottleThreads throttleThreads = bdbConfig.ThrottleThreads; bool throttleThreadsEnabled = throttleThreads != null && throttleThreads.Enabled; if (Log.IsDebugEnabled) { Log.DebugFormat("Initialize() BerkeleyDbConfig: ThrottleThreads = {0}", throttleThreadsEnabled); } if (throttleThreadsEnabled) { threadCount = bdbConfig.ThrottleThreads.ThreadCount; if (Log.IsInfoEnabled) { Log.InfoFormat("Initialize() BerkeleyDbConfig: ThreadCount = {0}", threadCount); } //int federationSize = 10; int dbCount = bdbConfig.GetDatabaseCount(); if (Log.IsInfoEnabled) { Log.InfoFormat("Initialize() Calculated number of databases = {0}", dbCount); } if (dbCount < threadCount) { threadCount = dbCount; if (Log.IsInfoEnabled) { Log.InfoFormat("Initialize() Thread count reduced to {0}", threadCount); } } const string threadPoolName = "BerkeleyDb Thread Pool"; const string dispatcherQueueName = "Single Thread Queue"; queues = new ThrottledQueue[threadCount]; PostMessageDelegate postMessageDelegate = PostMessage; for (int i = 0; i < threadCount; i++) { queues[i] = new ThrottledQueue(threadPoolName, dispatcherQueueName + i, postMessageDelegate, bdbConfig.MaxPoolItemReuse); } queueCounterTimer = new Timer(CountThrottledQueues, null, 5000, 5000); } } catch (Exception exc) { if (Log.IsErrorEnabled) { Log.Error("Error initializing.", exc); } throw; } }
public void Initialize(RelayNodeConfig config, ComponentRunState runState) { try { if (config == null) { if (Log.IsErrorEnabled) { Log.ErrorFormat("RelayNodeConfig is NULL"); } throw new ApplicationException("RelayNodeConfig is NULL"); } relayNodeConfig = config; Initialize(GetConfig(config), GetInstanceName(), runState); } catch (Exception exc) { if (Log.IsErrorEnabled) { Log.ErrorFormat("Error initializing: {0}", exc); } throw; } }