private void ExecuteAction(ClusterAction action, long termPosition) { if (isRecovering) { return; } long logPosition = termBaseLogPosition + termPosition; switch (action) { case ClusterAction.SNAPSHOT: OnTakeSnapshot(termPosition); serviceControlPublisher.AckAction(logPosition, leadershipTermId, serviceId, action); break; case ClusterAction.SHUTDOWN: OnTakeSnapshot(termPosition); serviceControlPublisher.AckAction(logPosition, leadershipTermId, serviceId, action); ctx.TerminationHook().Invoke(); break; case ClusterAction.ABORT: serviceControlPublisher.AckAction(logPosition, leadershipTermId, serviceId, action); ctx.TerminationHook().Invoke(); break; } }
internal void OnClusterChange( long leadershipTermId, long logPosition, long timestampMs, int leaderMemberId, int clusterSize, ChangeType eventType, int memberId, string clusterMembers) { clusterTimeMs = timestampMs; // TODO: inform service of cluster membership change if (memberId == this.memberId && eventType == ChangeType.LEAVE) { _consensusModuleProxy.Ack(logPosition, ackId++, serviceId); ctx.TerminationHook().Invoke(); } }
private void ExecuteAction(ClusterAction action, long position, long leadershipTermId) { if (isRecovering) { return; } switch (action) { case ClusterAction.SNAPSHOT: _consensusModuleProxy.Ack(position, ackId++, OnTakeSnapshot(position, leadershipTermId), serviceId); break; case ClusterAction.SHUTDOWN: _consensusModuleProxy.Ack(position, ackId++, OnTakeSnapshot(position, leadershipTermId), serviceId); ctx.TerminationHook().Invoke(); break; case ClusterAction.ABORT: _consensusModuleProxy.Ack(position, ackId++, serviceId); ctx.TerminationHook().Invoke(); break; } }