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)); } }
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)); } }
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)); }
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)); }
public void Handle(ElectionMessage.ElectionsDone received) { _currentEpochNumber = received.ProposalNumber; Received(received, "currentEpochNumber {currentEpochNumber}.", _currentEpochNumber); }