Beispiel #1
0
        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();
            }
        }
Beispiel #3
0
        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;
            }
        }