fix(ha-prevote): make PreVote denial log-reason match the eligibility gate order exactly
The cluster.c denial-reason elimination ordered catch_up before fresh_heartbeat, disagreeing with raft_cb_vote_eligible (which checks fresh-heartbeat-on-STANDBY before catch-up). In the rare STANDBY catch-up + fresh-heartbeat overlap the log could report catch_up while the gate denied on fresh_heartbeat. Expose the pure read predicate ha_heartbeat_is_fresh and mirror the gate's exact order so the logged reason can no longer disagree with the actual denial. Decision unchanged; log-string fidelity only. prevote/vote-gate/failover-prevote suites green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
parent
c45f80ab2b
commit
47f733891b
3 changed files with 16 additions and 10 deletions
|
|
@ -763,6 +763,11 @@ void ha_discover_primary(ha_state_t *ha, cluster_t *c);
|
|||
/* ha_on_heartbeat_received: reset the heartbeat deadline (Req 6.3). */
|
||||
void ha_on_heartbeat_received(ha_state_t *ha);
|
||||
|
||||
/* ha_heartbeat_is_fresh: 1 if a primary message arrived within
|
||||
* heartbeat_timeout_ms (leader-stickiness predicate). Exposed for PreVote
|
||||
* denial-reason logging in cluster.c; pure read, no state change. */
|
||||
int ha_heartbeat_is_fresh(ha_state_t *ha);
|
||||
|
||||
/* ha_disarm_heartbeat_timeout_vtask: stop the heartbeat watchdog thread. */
|
||||
void ha_disarm_heartbeat_timeout_vtask(ha_state_t *ha);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue