Skip to content

Follow-ups from #767: a named CI interlock for the #712 tests, and the bare-metal failing-first #795

Description

@FumingPower3925

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    area/engineEngine interface or implementationarea/testTesting infrastructureengine/iouringio_uring engine specifics

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions