Пример #1
0
        /// <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);
        }
Пример #2
0
 /// <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);
     }
 }
Пример #3
0
		/// <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);
			}
		}
Пример #4
0
 /// <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);
 }
Пример #5
0
 /// <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;
 }
Пример #6
0
        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);
            }
        }
Пример #7
0
		/// <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;
		}
Пример #8
0
		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;
			}
		}
Пример #9
0
		/// <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;
		}
Пример #10
0
        /// <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);
        }
Пример #11
0
 /// <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;
			}
		}
 /// <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);
 }