Example #1
0
 private void onBallotRejected(LeaderState state, SolicitateBallotResponse response)
 {
     updateBallotNumber(state, response);
     clearState(state);
     state.BallotStatus = BallotStatus.Rejected;
     BallotRejected?.Invoke(this, EventArgs.Empty);
 }
Example #2
0
 private void onBallotApproved(LeaderState state, SolicitateBallotResponse response)
 {
     removeAcceptorFromWaitingQueue(state, response.MessageSender);
     storePreviousAcceptedValuesFromAcceptors(state, response.Decision);
     if (majorityOfAcceptorsReplied(state))
     {
         state.BallotStatus = BallotStatus.Adopted;
         BallotApproved?.Invoke(this, EventArgs.Empty);
     }
 }
Example #3
0
        private void sendSolicitateBallotResponse(MessageSender sendTo, AcceptorState state)
        {
            SolicitateBallotResponse response = new SolicitateBallotResponse
            {
                BallotNumber  = state.BallotNumber,
                MessageSender = state.MessageSender,
                Decision      = state.LastAcceptedVote
            };

            this.broker.SendMessage(sendTo.UniqueId, response);
        }
Example #4
0
        public void Execute(MessageStrategyExecuteArg <IMessage> obj)
        {
            if (!(obj.Message is SolicitateBallotResponse))
            {
                throw new MessageStrategyException("This strategy shouldn't be invoked with this message type");
            }

            SolicitateBallotResponse response = obj.Message as SolicitateBallotResponse;
            LeaderState state = obj.RoleState as LeaderState;

            if (ballotIsApproved(state.BallotNumber, response.BallotNumber))
            {
                onBallotApproved(state, response);
            }
            else if (higherBallotHasBeenApproved(state.BallotNumber, response.BallotNumber))
            {
                onBallotRejected(state, response);
            }
        }
Example #5
0
 private void updateBallotNumber(LeaderState state, SolicitateBallotResponse response)
 {
     state.BallotNumber = response.BallotNumber.Increment();
 }