private void Handle(ElectionMessage.ElectionsDone message)
        {
            if (_master != null && _master.InstanceId == message.Master.InstanceId)
            {
                if (_master.InstanceId == _nodeInfo.InstanceId)
                {
                    _fsm.Handle(new SystemMessage.WriteEpoch());
                }
                return;
            }

            _master             = VNodeInfoHelper.FromMemberInfo(message.Master);
            _lastEpochId        = message.Master.EpochId;
            _subscriptionId     = Guid.NewGuid();
            _stateCorrelationId = Guid.NewGuid();
            _outputBus.Publish(message);
            if (_master.InstanceId == _nodeInfo.InstanceId)
            {
                _fsm.Handle(new SystemMessage.BecomePreMaster(_stateCorrelationId));
            }
            else
            {
                _fsm.Handle(new SystemMessage.BecomePreReplica(_stateCorrelationId, _master));
            }
        }
示例#2
0
        private void Handle(ElectionMessage.ElectionsDone message)
        {
            if (_master != null && _master.InstanceId == message.Master.InstanceId)
            {
                //if the master hasn't changed, we skip state changes through PreMaster or PreReplica
                if (_master.InstanceId == _nodeInfo.InstanceId && _state == VNodeState.Master)
                {
                    //transitioning from master to master, we just write a new epoch
                    _fsm.Handle(new SystemMessage.WriteEpoch());
                }
                return;
            }

            _master             = VNodeInfoHelper.FromMemberInfo(message.Master);
            _subscriptionId     = Guid.NewGuid();
            _stateCorrelationId = Guid.NewGuid();
            _outputBus.Publish(message);
            if (_master.InstanceId == _nodeInfo.InstanceId)
            {
                _fsm.Handle(new SystemMessage.BecomePreMaster(_stateCorrelationId));
            }
            else
            {
                _fsm.Handle(new SystemMessage.BecomePreReplica(_stateCorrelationId, _master));
            }
        }
示例#3
0
        public void Handle(ElectionMessage.ElectionsDone message)
        {
            var oldCluster = _cluster;

            _cluster = UpdateCluster(_cluster,
                                     x => x.InstanceId == message.Master.InstanceId
                                        ? x.Updated(VNodeState.Master)
                                        : x.Updated(VNodeState.Unknown));
            if (_cluster.HasChangedSince(oldCluster))
            {
                LogClusterChange(oldCluster, _cluster, "Elections Done");
            }
            _bus.Publish(new GossipMessage.GossipUpdated(_cluster));
        }
示例#4
0
        public void Handle(ElectionMessage.ElectionsDone message)
        {
            var oldCluster = _cluster;

            _cluster = UpdateCluster(_cluster,
                                     x => x.InstanceId == message.Leader.InstanceId
                                        ? x.Updated(_timeProvider.UtcNow, VNodeState.Leader)
                                        : x.Updated(_timeProvider.UtcNow, VNodeState.Unknown),
                                     _timeProvider, DeadMemberRemovalPeriod);
            if (_cluster.HasChangedSince(oldCluster))
            {
                LogClusterChange(oldCluster, _cluster, "Elections Done");
            }
            _bus.Publish(new GossipMessage.GossipUpdated(_cluster));
        }
示例#5
0
 public void Handle(ElectionMessage.ElectionsDone received)
 {
     _currentEpochNumber = received.ProposalNumber;
     Received(received, "currentEpochNumber {currentEpochNumber}.", _currentEpochNumber);
 }