Refactor: fix handling of non-voter leader #924
Merged
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Changelog
Refactor: fix handling of non-voter leader
Openraft does not require Leader/Candidate to be a voter.
Before this commit, Openraft's handling of non-voter leader is
inconsistent:
For a node that has a vote proposed by this node and is committed, and is not a voter:
calc_server_state()
returnsLearner
.is_leader()
returns true.Since this commit,
calc_server_state()
andis_leader()
returns consistent result according to the following table:For node-2:
Node-2 with vote
(term=1, node_id=2, committed=true)
:Node-2 with vote
(term=1, node_id=2, committed=false)
:Node-3 with vote
(term=1, node_id=99, committed=false|true)
:This change is