feat(ha-election): per-priority failover election stagger + prevote dispatch-gate
Desync FAILOVER re-elections by node priority (ha_election_stagger_ms / ha_failover_stagger_fn) mirroring the startup stagger, with seed jitter and async prevote start; allow prevote in voter roles through the dispatch gate. Adds HA role and vote-gate tests (stagger desync by priority, prevote on dead primary, stickiness-lapse grants). Pre-existing uncommitted work, committed to establish a clean baseline before ha-commit-durability implementation.
This commit is contained in:
parent
223e1b8578
commit
749e194207
5 changed files with 238 additions and 2 deletions
|
|
@ -837,6 +837,18 @@ void ha_start_prevote_async(ha_state_t *ha, cluster_t *c);
|
|||
*/
|
||||
void ha_begin_failover(ha_state_t *ha, cluster_t *c);
|
||||
|
||||
/*
|
||||
* ha_election_stagger_ms: per-node desync delay (ms) for a FAILOVER re-election.
|
||||
*
|
||||
* Mirrors the startup stagger (myapp.c): my_priority * election_priority_step_ms
|
||||
* plus a fresh random jitter in [0, election_jitter_max_ms]. Applied before the
|
||||
* PreVote start on the failover path so two survivors that lose the primary at
|
||||
* the same instant do not campaign in lock-step and split the vote forever
|
||||
* (Raft §5.2 randomized election timeout; bug-606). Re-randomized each call —
|
||||
* the jitter_seed advances — so repeated collisions still converge.
|
||||
*/
|
||||
uint32_t ha_election_stagger_ms(ha_state_t *ha);
|
||||
|
||||
/*
|
||||
* ha_dispatch_repl_action_for_standby: evaluate the replication decision for
|
||||
* one standby and execute the resulting action.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue