コード例 #1
0
ファイル: ProcessWatchDog.cs プロジェクト: mohsin019/BusPOC
        //object _syncLock=new object();

        public ProcessWatchDog(ILogger logger, IStateManager stateManager,
                               IBatchEngineSubscribers batchEngineSubscribers, ICacheAside cacheAside,
                               ISerializersFactory serializersFactory, IEntityFactory entityFactory, IEventAggregator eventAggregator,
                               IProcessDataStorage storage, IPubSubFactory pubSubFactory, IResolver resolver,
                               IBatchLoggerFactory loggerFactory, IProcessRepository registeredProcesses,
                               ProcessVolumePipeline volumePipeline) : base("WatchDog", logger)
        {
            _stateManager           = stateManager;
            _batchEngineSubscribers = batchEngineSubscribers;
            _cacheAside             = cacheAside;
            _eventAggregator        = eventAggregator;
            _storage             = storage;
            _pubSubFactory       = pubSubFactory;
            _resolver            = resolver;
            _loggerFactory       = loggerFactory;
            _registeredProcesses = registeredProcesses;
            _volumePipeline      = volumePipeline;
            _groupsHandler       = new GroupsHandler(logger, batchEngineSubscribers, stateManager, serializersFactory, entityFactory, resolver, loggerFactory);
            Interval             = TimeSpan.FromMinutes(3);

            _subGroupRemoved = eventAggregator.Subscribe4Broadcast <ProcessGroupRemovedMessage>(RemoveGroup);
            _subRem          = eventAggregator.Subscribe <TextMessage>(ProcessRemoved, Constants.EventProcessFinished);

            _serializer = SerializersFactory.Instance.GetSerializer(typeof(GroupMessage));

            this._volumeGenSub = eventAggregator.Subscribe <TextMessage>(OnVolumeGenerated, Constants.EventProcessVolumeGenerated);
            _checkGroupSub     =
                eventAggregator.Subscribe <TextMessage>(CheckProcessGroup, Constants.EventCheckGroupCommand);
            _retrySub     = eventAggregator.Subscribe <TextMessage>(OnVolumeGenerated, Constants.EventProcessRetry);
            _healthSub    = eventAggregator.Subscribe4Broadcast <HealthMessage>(PublishHealth);
            _systemLogger = _loggerFactory.GetSystemLogger();

            this._processAddedSub = eventAggregator.Subscribe <TextMessage>(OnProcessGroupAdded, Constants.EventProcessGroupAdded);
            _volErrorSub          = eventAggregator.Subscribe <VolumeErrorMessage>(OnProcessVolumeError);
        }
コード例 #2
0
ファイル: Bus.cs プロジェクト: mohsin019/BusPOC
        private void SwitchToLocalWatchDog()
        {
            _watchDogSync.EnterWriteLock();
            try
            {
                _logger.Info("Switching to Master node");
                _watchDogCancellationTokenSource?.Cancel();

                if (_cancellationToken.IsCancellationRequested)
                {
                    _logger.Info("Bus stopped, can't switch to slave node");
                    return;
                }

                _watchDogCancellationTokenSource = CancellationTokenSource.CreateLinkedTokenSource(_cancellationToken);

                var volumePipeline = new ProcessVolumePipeline(_watchDogCancellationTokenSource.Token, _logger, _stateManager, _cacheAside, _processRepository, VolumeHandler, _resolver, EventAggregator, _branchEngineSubscriber);//todo move to watchdog class
                var watchDog       = new ProcessWatchDog(_logger, _stateManager, _branchEngineSubscriber, _cacheAside, SerializersFactory.Instance, EntityFactory,
                                                         EventAggregator, _storage, PubSubFactory, _resolver, _batchLoggerFactory, _processRepository, volumePipeline);
                _watchDogPipeline = new Pipeline <IWatchDogMessage>(watchDog);

                _watchDogCancellationTokenSource.Token.Register(() =>
                {
                    _logger.Info("Master node ended");
                    _logger.Debug("Master node ended");
                    watchDog.Dispose();
                });

                watchDog.Start(_watchDogCancellationTokenSource.Token);


                _processRepository.InvokeOnMaster();

                _leaderManager.InitializationComplete();
                _logger.Info("Switching to Master node complete");
                _logger.Debug("Running Master node");
            }
            catch (Exception e)
            {
                _logger.Error("Error switching watchdog to primary node", e);
            }
            finally
            {
                _watchDogSync.ExitWriteLock();
            }
        }