...
Section |
---|
|
We add a new quorum state Prospective for servers which are sending Pre-Vote requests as well as new state transitions. The original (left) and new states (right) are below for comparison. Column |
---|
| * Unattached|Resigned transitions to: * Unattached: After learning of a new election with a higher epoch * Voted: After granting a vote to a candidate * Candidate: After expiration of the election timeout * Follower: After discovering a leader with an equal or larger epoch * * Voted transitions to: * Unattached: After learning of a new election with a higher epoch * Candidate: After expiration of the election timeout * * Candidate transitions to: * Unattached: After learning of a new election with a higher epoch * Candidate: After expiration of the election timeout * Leader: After receiving a majority of votes * * Leader transitions to: * Unattached: After learning of a new election with a higher epoch * Resigned: When shutting down gracefully * * Follower transitions to: * Unattached: After learning of a new election with a higher epoch * Candidate: After expiration of the fetch timeout * Follower: After discovering a leader with a larger epoch
|
Column |
---|
| * Unattached|Resigned transitions to: * Unattached: After learning of a candidate with a higher epoch (clarifying language)
* Voted: After granting a standard vote to a candidate (clarifying language)
* Prospective: After expiration of the election timeout
* Follower: After discovering a leader with an equal or larger epoch
*
* Voted transitions to: * Unattached: After learning of a candidate with a higher epoch
* Prospective: After expiration of the election timeout
* Follower: After discovering a leader with an equal or larger epoch (missed in original docs) *
* Prospective transitions to: * Unattached: After learning of a candidate with a higher epoch * Prospective: After expiration of the election timeout * Candidate: After receiving a majority of pre-votes
* Follower: After discovering a leader with an equal or larger epoch *
* Candidate transitions to: * Unattached: After learning of a candidate with a higher epoch
* Prospective: After expiration of the election timeout
* Leader: After receiving a majority of standard votes
* Follower: After discovering a leader with an equal or larger epoch (missed in original docs)
*
* Leader transitions to: * Unattached: After learning of a candidate with a higher epoch *
* Follower transitions to: * Unattached: After learning of a candidate with a higher epoch
* Prospective: After expiration of the electionfetch timeout
* Follower: After discovering a leader with a larger epoch |
|
A candidate follower will now transition to Prospective
when its fetch timeout expires. The Prospective
server will send a VoteRequest
with the PreVote
field set to true
and CandidateEpoch set ReplicaEpoch
set to its [epoch + 1] when its election timeout expirescurrent, unbumped epoch. If [majority - 1] of VoteResponse
grant the vote, the candidate server will transition to Candidate
and will then bump its epoch up and send a VoteRequest
with PreVote
set to false
(which is our standard vote that will cause state changes for servers receiving the requestthe original behavior).
When servers receive VoteRequests with the PreVote
field set to true
, they will respond with VoteGranted
set to
...