Context
The DSS pool's membership is not static, participants join and leave over time. The raftstore currently only supports static membership. This issue outlines the implementation plan for dynamic membership.
Scope
- Support adding and removing nodes in the consensus package using ProposeConfChange .
- Prevent node ID reuse by tracking the list of removed node IDs and rejecting an addition that tries to reuse one.
- Refuse to remove a voter if doing so would drop the pool below 3 voters.
- Implement the
dssctl tool to trigger membership changes (add / remove), issuing the three per-service proposals and reporting the result of each. The tool should also allow the user to select a single service (aux, rid, scd) for the membership change.
- Document the procedure.
Out-of-Scope (tracked separately)
- Learner status and promotion / demotion between learner and voter.
- CAs and pool authentication
Expected result
- A node can be added to and removed from all or a subset of the three Raft groups via
dssctl with the CLI reporting all results.
- Removing the current leader triggers an election.
- Attempting to remove a voter below the 3-voter floor is rejected.
- Attempting to re-add a node with a previously removed ID is rejected.
- Procedure for membership management and cli usage is clearly documented.
Context
The DSS pool's membership is not static, participants join and leave over time. The raftstore currently only supports static membership. This issue outlines the implementation plan for dynamic membership.
Scope
dssctltool to trigger membership changes (add / remove), issuing the three per-service proposals and reporting the result of each. The tool should also allow the user to select a single service (aux, rid, scd) for the membership change.Out-of-Scope (tracked separately)
Expected result
dssctlwith the CLI reporting all results.