The review of #767 (celeris#712) had one blocking finding, fixed on the branch in round 2 (head d9307b5). One enter before the park ran at most 20 deferred completions per local-work pass (IO_LOCAL_TW_DEFAULT_MAX, kernel 6.13 and later). With 64 connections closed in the parking iteration, 20 of them got their FIN. The park now waits until every closed connection's kernel ops have delivered their terminal CQEs, and a 64-connection arm checks it.
The review also left the minor findings and nits below. Items 1 and 2 are still open; each says what to do.
1. No named-test interlock for the #712 tests in CI (nit)
CI covers the #712 tests only through the engine/iouring package step's tally of unlisted SKIP lines. That step names only the two celeris#639 tests (.github/workflows/ci.yml lines 166-181 in the merged tree). grep -n 'celeris712\|park_close' .github/workflows/*.yml finds nothing, so a rename or a removal of these tests would still go green. #766 added its tests to the named interlocks.
To do: add the six tests in engine/iouring/park_close_fin_test.go to a named interlock, with want N, ran N, passed N, SKIP lines 0:
TestParkedWorkerSendsFINForAHeaderTimeoutClose
TestParkedWorkerSendsFINForAReadTimeoutClose
TestRunningWorkerSendsFINForAHeaderTimeoutClose
TestParkedAsyncWorkerSendsFINForAHeaderTimeoutClose
TestParkedWorkerSendsFINToManyReadTimeoutCloses
TestParkedWorkerSendsFINToManyHeaderTimeoutCloses
Doing this in #767 would touch the lines of ci.yml that #766 changes.
2. The failing-first exists only on the laptop kernel (minor, open until the cluster rows run)
The defect has been measured failing only on the laptop's 7.0.12-linuxkit. CI's 6.17-azure runs only the fixed head.
The bare-metal rows in evidence/_queue/cluster.tsv (lane EP-2) run:
- the fixed head;
8013189, the new arms on the round-1 fix, where the expected result is red: fin_seen_while_parked of 20 per worker (20/64 with one worker, 40/64 with two), the kernel's cap;
d655435, main plus the round-1 tests.
Their PASS criteria now key on defer_taskrun=true, which the arms log since round 2 (item 3).
To do: read those rows' results into #767 or celeris#712 when they run.
3. Items the round-2 push dealt with (for the record)
- The tests did not show that the ring defers its task work (minor). A COOP_TASKRUN ring logs
tier=high too, and on such a ring the park arms passed on unfixed code (the reviewer's NODEFER mutant, 20/20). Every arm now logs defer_taskrun. Under CELERIS_REQUIRE_IOURING_WORKERS=1 (CI and the cluster), a ring without it fails the premise.
- The flush made with nothing pending was untested (nit, MPENDING). Moot: round 2 removed the pre-park flush and
Ring.SubmitAndFlush. The A5 submit is main's again.
- The io-wq exclusion was argued (nit). Moot for the same reason. The park now waits for the terminal CQE of every op
kernelInflight counts, whatever runs it, bounded by pendingReleaseHoldNanos (5 s) plus one ring wait.
To do: nothing further.
The review of #767 (celeris#712) had one blocking finding, fixed on the branch in round 2 (head
d9307b5). One enter before the park ran at most 20 deferred completions per local-work pass (IO_LOCAL_TW_DEFAULT_MAX, kernel 6.13 and later). With 64 connections closed in the parking iteration, 20 of them got their FIN. The park now waits until every closed connection's kernel ops have delivered their terminal CQEs, and a 64-connection arm checks it.The review also left the minor findings and nits below. Items 1 and 2 are still open; each says what to do.
1. No named-test interlock for the #712 tests in CI (nit)
CI covers the #712 tests only through the
engine/iouringpackage step's tally of unlisted SKIP lines. That step names only the two celeris#639 tests (.github/workflows/ci.ymllines 166-181 in the merged tree).grep -n 'celeris712\|park_close' .github/workflows/*.ymlfinds nothing, so a rename or a removal of these tests would still go green. #766 added its tests to the named interlocks.To do: add the six tests in
engine/iouring/park_close_fin_test.goto a named interlock, withwant N, ran N, passed N, SKIP lines 0:TestParkedWorkerSendsFINForAHeaderTimeoutCloseTestParkedWorkerSendsFINForAReadTimeoutCloseTestRunningWorkerSendsFINForAHeaderTimeoutCloseTestParkedAsyncWorkerSendsFINForAHeaderTimeoutCloseTestParkedWorkerSendsFINToManyReadTimeoutClosesTestParkedWorkerSendsFINToManyHeaderTimeoutClosesDoing this in #767 would touch the lines of
ci.ymlthat #766 changes.2. The failing-first exists only on the laptop kernel (minor, open until the cluster rows run)
The defect has been measured failing only on the laptop's 7.0.12-linuxkit. CI's 6.17-azure runs only the fixed head.
The bare-metal rows in
evidence/_queue/cluster.tsv(lane EP-2) run:8013189, the new arms on the round-1 fix, where the expected result is red:fin_seen_while_parkedof 20 per worker (20/64with one worker,40/64with two), the kernel's cap;d655435, main plus the round-1 tests.Their PASS criteria now key on
defer_taskrun=true, which the arms log since round 2 (item 3).To do: read those rows' results into #767 or celeris#712 when they run.
3. Items the round-2 push dealt with (for the record)
tier=hightoo, and on such a ring the park arms passed on unfixed code (the reviewer's NODEFER mutant, 20/20). Every arm now logsdefer_taskrun. UnderCELERIS_REQUIRE_IOURING_WORKERS=1(CI and the cluster), a ring without it fails the premise.Ring.SubmitAndFlush. The A5 submit is main's again.kernelInflightcounts, whatever runs it, bounded bypendingReleaseHoldNanos(5 s) plus one ring wait.To do: nothing further.