private void onBallotRejected(LeaderState state, SolicitateBallotResponse response) { updateBallotNumber(state, response); clearState(state); state.BallotStatus = BallotStatus.Rejected; BallotRejected?.Invoke(this, EventArgs.Empty); }
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); } }
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); }
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); } }
private void updateBallotNumber(LeaderState state, SolicitateBallotResponse response) { state.BallotNumber = response.BallotNumber.Increment(); }