test(ha-commit-barrier-rollout): RED tests for persist_commit_barrier (task 2.1)
7 cases: two covered short-circuits, timeout with committed_lsn unmoved, covering-ACK release, sync_timeout_ms fallback (bounded both directions), n_peers=1 standalone, NOT_READY passthrough via cap saturation. Watermark resolved to current_lsn - 1 (design's literal phrasing unsatisfiable per persist.h:71 invariant) with off-by-one killing power both ways. 15 tests / 7 RED; suite baseline zero.
This commit is contained in:
parent
e8ecc87551
commit
611fbc8d7b
6 changed files with 405 additions and 2 deletions
|
|
@ -131,6 +131,21 @@ typedef enum {
|
|||
* ERROR and returns WAL_MODE_RETAIN (never dropped, never confirmed early). */
|
||||
wal_commit_mode_t wal_classify(uint32_t wal_type, int detail);
|
||||
|
||||
/* Commit barrier — handler-callable WAIT completion on everything appended
|
||||
* so far (ha-commit-barrier-rollout). Snapshots the appended watermark
|
||||
* (current_lsn - 1, under p->lock — matching persist_wal_sync_append's
|
||||
* read); returns 0 without blocking when committed_lsn already covers it
|
||||
* (or nothing was ever appended). Otherwise delegates to
|
||||
* commit_submit(COMMIT_MODE_WAIT) and returns its code unmodified:
|
||||
* 0 — committed on a majority
|
||||
* -ETIMEDOUT — not committed within the deadline (entries remain
|
||||
* in the log; outcome converges per umbrella 2.5)
|
||||
* -XCE_ERR_NOT_READY — engine admission cap exhausted (retriable)
|
||||
* timeout_ms = 0 falls back to p->config.sync_timeout_ms. n_peers <= 1
|
||||
* returns 0 immediately (engine self-quorum, standalone preserved).
|
||||
* Call only from vtask threads with no entity locks held. */
|
||||
int persist_commit_barrier(persist_t* p, uint32_t timeout_ms);
|
||||
|
||||
/* Force WAL fdatasync (for tests and clean shutdown) */
|
||||
int persist_flush(persist_t* p);
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue