ci(fast-checks): decide admission on one census read instead of polling 180 s

Merged
TE
3d ago
+59-14

What happened

Every fast-checks run starts with the admit picker. On run 41718897738 (cmux#34036), the picker step "Select a live fleet runner or bounded overflow" ran for 182 s, from 21:10:04.9Z to 21:13:06.7Z. Its census reads all succeeded. It polled every 15 s for an idle fleet runner, found none, and took blacksmith-8vcpu-ubuntu-2404. That 180 s is a fixed cost whenever the fleet is busy or gone, on top of any hosted queue wait.

Change

The picker (scripts/ci/fast_checks_runner.py) now decides on one census read:

  • An online Linux fleet runner, idle or busy: the checks go to cmux-fleet-linux-x64. A checks job queued there starts as soon as a fleet runner frees. The lane-gh broker, which dispatches every fast-checks run, already moves a checks job that sits 180 s on the fleet label with no start to the Blacksmith overflow. So the fleet-first order and its about-3-minute bound still hold; the bound is just measured where the job actually waits, not by holding admit.
  • No online fleet runner (offline, or none registered): the smallest measured Blacksmith size, at once.
  • Unreadable census: read once more after 15 s, then overflow. A spent quota overflows at once, as before (#33652).

Wiring

main's fast-checks.yml pins this helper by commit, and still pins ecc5d607 (#30648). A follow-up PR to main moves that pin to this change's merge commit; until then, runs keep the old picker.

Performance

MetricBeforeAfterDeltaHarness
Picker step, fleet busy or offline182 s (run 41718897738)one census read, about 1 s (plus one 15 s retry only if the census is unreadable)about -180 sadmit job log; tests/test_ci_fast_checks_runner.py
Whole admit job3m27s (21:09:40Z to 21:13:07Z)about 30 s (checkout and token mint)about -3 minadmit job log; to be measured on the first run after the pin moves

Testing

  • python3 tests/test_ci_fast_checks_runner.py: 21 pass. The new test_one_census_read_decides_without_polling and test_an_unreadable_census_is_read_once_more_then_overflows fail on the base.
  • python3 tests/test_ci_pr_runner_pool.py: 262 pass.

Changelog

none

Agent session: agent session

🤖 Generated with Claude Code


Autofix with [code]smith
Open in [code]smith · Need help on this PR? Tag @codesmith-bot with what you need.


Summary by cubic

Cuts the fast-checks admission picker's fixed ~180 s wait when the fleet is busy or offline: it now decides on one census read instead of polling every 15 s for an idle fleet runner.

  • An online Linux fleet runner, idle or busy, keeps the checks on the fleet label; the lane-gh broker already moves a fleet-labeled checks job that sits 180 s to the Blacksmith overflow, so the fleet-first stall bound still holds where the job waits.
  • No online fleet runner falls back to the smallest measured Blacksmith size at once; an unreadable census is read once more after 15 s before overflowing, and a spent quota still overflows immediately.

Rollout

  • main's fast-checks.yml still pins the old helper commit (ecc5d607); a follow-up PR moves the pin to this change's merge commit, so runs keep the old picker until then.