feat(ha-commit-engine): repl-side wiring — ACK feed, membership hooks, adapter (task 5.2)
replicator_t gains ce pointer (set-once-before-traffic contract). repl_on_ack feeds commit_on_ack after releasing r->lock (iomgr-safe); four membership mutators feed commit_on_membership_change post-unlock, gated on actual mutation. walAck branch delegates to commit_submit(WAIT) when ce wired AND entry_lsn != 0 (LSN-0 interim guard until 5.3); legacy counting kept for ce==NULL, marked DEPRECATED. commit.c linked into production target (inert until 5.3 wiring). Tests 30-31 + all repl_majority walAck cases green; 33/34 remain RED for 5.3; baseline unchanged.
This commit is contained in:
parent
d1353360cc
commit
6600fd5d1f
6 changed files with 104 additions and 15 deletions
|
|
@ -59,7 +59,7 @@
|
|||
- Observable completion: new/updated cases FAIL (red) against unwired production code
|
||||
- _Requirements: 1.1, 1.2, 1.3, 2.1, 4.2, 4.4, 6.3_
|
||||
|
||||
- [ ] 5.2 Implement the repl-side wiring: ACK feed, membership hooks, adapter
|
||||
- [x] 5.2 Implement the repl-side wiring: ACK feed, membership hooks, adapter
|
||||
- repl.h: forward-declare `struct commit_engine`, add `ce` pointer to `replicator_t`, declare `repl_set_commit_engine()`; add `uint64_t entry_lsn` parameter to `repl_wait_majority_ack` (update the config_repl.c:916 caller to pass 0 — configAck branch behavior untouched)
|
||||
- repl.c: `repl_on_ack` calls `commit_on_ack(r->ce, slot_idx, acked_lsn)` after the `acked_lsn` store when wired; `repl_add_standby`/`repl_remove_standby`/`repl_start_catchup`/`repl_complete_catchup` call `commit_on_membership_change` when wired; walAck branch of `repl_wait_majority_ack` delegates to `commit_submit(ce, entry_lsn, COMMIT_MODE_WAIT, timeout_ms)` when wired, with the legacy counting kept only for `ce == NULL` test contexts and marked deprecated (retired by ha-commit-barrier-rollout)
|
||||
- Observable completion: ACK-feed and membership-hook tests from 5.1 PASS; configAck tests unaffected
|
||||
|
|
@ -92,3 +92,7 @@
|
|||
- (5.1) persist.c currently passes entry_lsn=0 to the adapter — if 5.2 lands walAck delegation before 5.3 passes written_lsn, the wired sync path returns -EINVAL. Land 5.2's delegation gated on ce!=NULL AND entry_lsn!=0 falling back to legacy, OR land 5.2+5.3 wiring in lockstep.
|
||||
- (5.1) Baseline failure root causes identified: test_committed_lsn_does_not_advance_on_timeout (test_repl_unit.c:294) expects the OLD contract (rc==0 + sync_rc out-param) but persist_wal_sync_append now rejects-on-timeout — STALE TEST EXPECTATION, fix the test at 6.1, not the code. test_p2_integration.c:test_single_node_committed_lsn_unchanged pins the -ENODEV degraded path that 5.3 replaces — update it at 5.3/6.1.
|
||||
- (5.1) Repo hygiene (pre-existing, out of scope): untracked src/lib/testsuite/test_wal_wire.c is referenced by committed src/lib/meson.build:176 — should be added to git eventually.
|
||||
- (5.2) commit.c linked into production controller_src ONE TASK EARLY (meson.build:3) — necessary (repl.c references engine symbols) and reviewer-verified inert (zero production callers of commit_engine_init/repl_set_commit_engine until 5.3; repl_init memsets ce=NULL → all new paths dormant).
|
||||
- (5.2) repl_broadcast's over-limit eviction (in_catch_up=1, repl.c:268-277) deliberately does NOT feed commit_on_membership_change — reviewer-proven no-op for waiter correctness (shrink can never raise the majority candidate; monotonic store). Design lists exactly four mutators; eviction recovery fires the hook at repl_complete_catchup.
|
||||
- (5.2) r->ce is read unlocked under a set-once-before-traffic contract (repl.h:47-52). 5.3 must wire it at cluster init BEFORE replication traffic; never NULL it concurrent with traffic (fini ordering is 5.3's responsibility).
|
||||
- (5.2) Remaining RED going into 5.3: test 33 (Expected -110 Was 0 — persist passes entry_lsn=0 → legacy fallback) and test 34 (Expected 0 Was -19 — -ENODEV special case). These plus test 32's honest-delegation green are 5.3's completion evidence.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue