Context
The Raft library distinguishes voter nodes who count towards quorum from learners who receive and apply the log without voting. Our design uses learner status in the following ways:
- Transient during a join: a node joining a pool starts as a learner to avoid widening the quorum before it can actually ack anything. When the node catches up, it can be promoted to a voter status.
- Standing as a scalability measure: a node remains a learner and is never promoted to voter. This decouples the voting set from overall pool membership and mitigates the impact of a large pool's quorum size. We can therefore add nodes to the pool without growing the quorum.
Scope
- A node is added as a learner by default
- Define and implement the condition under which a learner is considered caught up and eligible for promotion
- Promotion / demotion support (per-group)
dssctl must distinguish the cases defined above
- Document the recommended workflow
Out-of-Scope
Expected result
- A newly added node starts as a learner and is visible as such via a
dssctl listing command
- The pool defines and applies a concrete catch-up condition to know when a learner may be promoted
- A node can be added as a standing learner that is never auto-promoted
- A node can be promoted or demoted via
dssctl
- Procedure is clearly documented with the trade-offs of voter / learner statuses clearly outlined
Context
The Raft library distinguishes voter nodes who count towards quorum from learners who receive and apply the log without voting. Our design uses learner status in the following ways:
Scope
dssctlmust distinguish the cases defined aboveOut-of-Scope
Expected result
dssctllisting commanddssctl