feat(ha-convergence-recovery): ACK-driven catch-up continuation + parity re-inclusion (task 4.2)
This commit is contained in:
parent
c2221077ff
commit
ffd08c6472
5 changed files with 243 additions and 22 deletions
|
|
@ -349,6 +349,34 @@ int ha_rejoin_reconcile(cluster_t *c, uint64_t primary_committed_lsn);
|
|||
void cluster_apply_ctrlhello_reply(cluster_t *c, uint64_t committed_lsn,
|
||||
uint64_t config_tag);
|
||||
|
||||
/*
|
||||
* ha_walack_on_ack: the post-ACK catch-up decision (ha-convergence-recovery
|
||||
* task 4.2, Req 5.1, 5.2, 7.1, design D6). Called from the walAck branch of
|
||||
* repl_ack_decode_and_dispatch (ha.c) AFTER repl_on_ack, and from the
|
||||
* ha_walack_continuation_for_test shim so production and tests exercise the
|
||||
* same logic. Defined in config_repl.c (alongside ha_stream_wal_to_standby and
|
||||
* the continuation task body).
|
||||
*
|
||||
* target = max(committed_lsn, last_written) (same derivation as ha.c:2771-2776)
|
||||
* if acked_lsn < target → schedule ONE catch-up continuation that streams
|
||||
* [acked_lsn+1, target] on delaymgr (never inline on
|
||||
* iomgr), UNLESS c->ha.catchup_inflight[peer_idx] is
|
||||
* already set (per-standby single-flight, Req 5.2).
|
||||
* if acked_lsn >= target → repl_complete_catchup(&c->persist.repl, ep) to
|
||||
* re-include the standby in live replication (Req 7.1).
|
||||
*
|
||||
* c — cluster_t* (real persist + repl registry; never NULL).
|
||||
* ep — repl registry endpoint key for the standby (endpoint_t* /
|
||||
* repl_ep_t); identifies the standby slot for streaming + parity.
|
||||
* peer_idx — 0-based standby slot index (into c->ha.catchup_inflight[]).
|
||||
* acked_lsn— the LSN the standby just acknowledged.
|
||||
*
|
||||
* Returns 0 on the parity / single-flight-suppressed paths and on a successfully
|
||||
* scheduled continuation; negative on a scheduling/allocation failure. Never
|
||||
* performs file I/O itself (streaming runs in the deferred continuation task).
|
||||
*/
|
||||
int ha_walack_on_ack(cluster_t *c, void *ep, int peer_idx, uint64_t acked_lsn);
|
||||
|
||||
|
||||
/* ── Redirect helpers used by join.c ──────────────────────── */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue