feat(conductor): add demote-voter to conductor rpc #18700
+19
−0
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.
Description
This PR exposes the
DemoteVotermethod via the conductor RPC API, allowing operators to demote a voting member to a non-voting member without removing and re-adding the node.Problem
The consensus layer already has a
DemoteVotermethod implemented, but it was not exposed through the RPC API. Without this RPC endpoint, operators who wanted to demote a voter to nonvoter had to:conductor_removeServerconductor_addServerAsNonvoterThis workaround has a significant drawback: when a node is removed, Raft's default behavior causes it to shut down, requiring a process restart before re-adding.
Solution
Expose the existing
DemoteVoterconsensus method through the RPC API asconductor_demoteVoter. This allows:Changes
DemoteVotermethod torpc/api.gointerfaceDemoteVoterimplementation inrpc/backend.goDemoteVoterclient method inrpc/client.goDemoteVoterhandler inconductor/service.goUsage
Tests
Manual testing was performed:
conductor_demoteVoteron one nodeThis is a straightforward RPC exposure of an existing consensus method. The underlying
DemoteVoterfunctionality is already tested as part of HashiCorp Raft.Additional context
Note: If the leader is demoted, it will trigger a new leader election. This is expected Raft behavior.
Metadata
Complements existing cluster management APIs (
addServerAsVoter,addServerAsNonvoter,removeServer)