feat(ha-prevote): rewire failover triggers through PreVote, defer destructive step (task 4.2)
ha_on_primary_ctrl_fd_rdhup + liveness_poll_fn now begin a PreVote round via ha_begin_failover -> ha_start_prevote_async instead of electing directly; WAL truncate + CTRL_ELECTING deferred to PreVote WON (ha_enter_real_election). Connection teardown + config-less voter guard preserved at the trigger. ha_on_heartbeat_received cancels an in-progress round and re-attaches as standby with no term change. Single-node immediate-WON synchronously enters the real election. PreVote now live; full controller suite 563 pass / 0 fail; bug-339/340 preserved. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
7e19bf6110
commit
b765fc4705
6 changed files with 492 additions and 124 deletions
|
|
@ -820,6 +820,18 @@ void ha_start_election_async(ha_state_t *ha, cluster_t *c,
|
|||
*/
|
||||
void ha_start_prevote_async(ha_state_t *ha, cluster_t *c);
|
||||
|
||||
/*
|
||||
* ha_begin_failover: single failover entry point (ha-prevote task 4.2).
|
||||
*
|
||||
* Called by both failover triggers (ha_on_primary_ctrl_fd_rdhup and, through
|
||||
* it, the liveness-timeout poll) AFTER connection-teardown bookkeeping and the
|
||||
* config-less voter-only guard. Starts a side-effect-free PreVote round
|
||||
* (ha_start_prevote_async); does NOT truncate the WAL or transition to
|
||||
* CTRL_ELECTING — those destructive steps are deferred to PreVote success.
|
||||
* c may be NULL in unit-test mode. Requirements: 1.1, 4.3, 4.4.
|
||||
*/
|
||||
void ha_begin_failover(ha_state_t *ha, cluster_t *c);
|
||||
|
||||
/*
|
||||
* 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