Attempts to commit up to the log index specified by the slot specified.
Attempts to commit up to the log index specified by the slot specified. A committed value is delivered to the application
The IO.
The current agent.
The value to commit specified by its number and slot position.
A tuple of the new progress and a seq of the identifiers and the response to the deliver operation.
Ack an Accept as high as promise.
Ack an Accept as high as promise. If the accept number > highestPromised it must update it's promise http://stackoverflow.com/q/29880949/329496
The PaxosIO.
The PaxosAgent.
The accept required to have number greater or equal to the agent's promise.
Makes a higher promise, journals it and responds to the sender with a PrepareAck.
Makes a higher promise, journals it and responds to the sender with a PrepareAck. Returns to follower if the agent was not already a follower. If the agent was a leader send out NoLongerLeader messages to any clients.
The IO operations.
The current agent.
The message.
The updated agent.
Locates the accepts where we have timed-out on getting a majority accept response.
Locates the accepts where we have timed-out on getting a majority accept response. If we have seen evidence of other nodes using a higher BallotNumber we "go higher" moving to a new epoch and refreshing our accepts to use the new ballot number.
input and output
The current role and state
The current time
If we see a commit at a higher slot we should backdown and request retransmission.
If we see a commit at a higher slot we should backdown and request retransmission. If we see a commit for the same slot but with a higher epoch id we should backdown. Other commits are ignored.
If no other logic has caught a timeout then do nothing.
Computes the contiguous committable messages, all messages that may be accepted and the corresponding new progress.
Computes the contiguous committable messages, all messages that may be accepted and the corresponding new progress. If the accept messages are not in log index order they will not be processed which is a bug on send which will halt the progress of the receiving node.
Here on a timeout we deal with either pending prepares or pending accepts putting a priority on prepare handling which backs down easily.
Here on a timeout we deal with either pending prepares or pending accepts putting a priority on prepare handling which backs down easily. Only if we have dealt with all timed out prepares do we handle timed out accepts which is more aggressive as it attempts to go-higher than any other node number.