Skip to content

test: add per-write journal recovery nightly coverage - #210

Merged
Greepolis merged 2 commits into
mainfrom
test/txn-intensive-coverage-201
Nov 12, 2026
Merged

Greepolis merged 2 commits into
mainfrom
test/txn-intensive-coverage-201

Conversation

@Greepolis

@Greepolis Greepolis commented Nov 9, 2026 •

Copy link
Copy Markdown
Owner

Scope

Adds an adversarial device model for kernel/txn/journal.c on top of PR #209, which itself builds on merged PR #208. A flush is not modelled as an atomic batch: the device may persist any prefix of writes in an arbitrary order, then lose the rest on power cut. Each scenario remounts a fresh block cache and exercises the production recovery path.

The oracle treats the durable commit record as the commit point. It sweeps persistence prefixes and orderings across descriptor/staging, commit-record, target-checkpoint and descriptor-retirement phases. The production mutation removes the checkpoint flush; a retirement-first persistence order proves that clearing the descriptor before target blocks are durable loses a committed update. The earlier commit-first negative control was removed because an orphaned commit record without its descriptor is correctly ignored by production recovery and was not a valid failure oracle.

Adds an ASan/UBSan nightly job, a focused CTest entry and a production mutation gate. TXN is the only module removed from the coverage debt by this PR. ABI remains uncovered, so the baseline becomes 1, not 0. Issue #201 must remain open until ABI is independently covered and all required PRs/nightly checks are complete.

Branch order

@Greepolis
Greepolis force-pushed the test/txn-intensive-coverage-201 branch from d10f029 to ec80da9 Compare November 9, 2026 10:11
@Greepolis
Greepolis changed the base branch from main to test/proc-intensive-coverage-201 November 9, 2026 10:11
@Greepolis
Greepolis force-pushed the test/txn-intensive-coverage-201 branch from b2da0b8 to cd82cfe Compare November 9, 2026 10:14
@Greepolis
Greepolis force-pushed the test/proc-intensive-coverage-201 branch from d463e2d to bb1e3ff Compare November 9, 2026 20:34
@Greepolis
Greepolis force-pushed the test/txn-intensive-coverage-201 branch from cd82cfe to 4040d4d Compare November 9, 2026 20:34
@Greepolis
Greepolis force-pushed the test/proc-intensive-coverage-201 branch from bb1e3ff to a5534ee Compare November 11, 2026 19:02
@Greepolis
Greepolis force-pushed the test/txn-intensive-coverage-201 branch from 4040d4d to 759b770 Compare November 11, 2026 19:02
@Greepolis
Greepolis marked this pull request as ready for review November 11, 2026 20:48
Greepolis and others added 2 commits November 12, 2026 14:54
A durable-sector model keeps the writes a flush issues pending, persists
any prefix of them in any order, cuts power and remounts the real
journal. The commit record must select exactly all-old or all-new
targets. An adversarial order that retires the descriptor first proves
that removing the checkpoint flush loses a committed update; that
production mutation goes red. TXN leaves the nightly coverage debt, and
the baseline is 1 (ABI, the documented exception).

The removal of the pre-commit flush, which the debt row asked to be
caught, is not observable: the commit record carries the log blocks'
checksum, so recovery keeps the old state. That is written beside the
row.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
static-checks.sh prints only each check's verdict line, so the list of
uncovered modules appeared in no CI output, which #201's first
acceptance criterion asks for. The main CI now runs the checker on its
own and writes the list to the job's step summary.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Greepolis
Greepolis force-pushed the test/txn-intensive-coverage-201 branch from a6e4833 to 27ec422 Compare November 12, 2026 13:54
@Greepolis
Greepolis changed the base branch from test/proc-intensive-coverage-201 to main November 12, 2026 13:54
@Greepolis Greepolis closed this Nov 12, 2026
@Greepolis Greepolis reopened this Nov 12, 2026
@Greepolis
Greepolis merged commit ed82492 into main Nov 12, 2026
19 checks passed
@Greepolis
Greepolis deleted the test/txn-intensive-coverage-201 branch November 12, 2026 14:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant