You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
compile-cache-e2e dead-peers 'never-accepting' timing ceiling overruns on Windows release runners #1739
compile-cache-e2e's "dead peers" case fails intermittently on the Windows release legs. Its never-accepting timing ceiling is exceeded by 0.6 to 1.1 s:
The ceiling is (2N - 1/2) x deadline for N=2 exchanges (scripts/compile-cache-e2e.sh ~line 900–950). A rerun passed both times. The PR run had passed on that branch's two previous heads, which do not touch the cache dial.
Measured: two overruns, both on Windows GitHub runners, both on the never-accepting peer. Each reported 2 traced exchanges over 2 connections.
Inferred, not measured: a slow runner charges the time to the exchange deadline. In the master run, ran out of budget on the manifest fetch suggests that the per-exchange total, not the connect, is what stretches. Whether that is timer granularity, scheduler delay or a real overrun in the budget accounting is undetermined.
To decide:
Does the launcher overrun its own configured deadline, which would be a defect?
Or is the ceiling too tight for a loaded Windows runner? Per the testing rules, the fix is then to judge against something a slow host cannot fake, not to raise the number.
Per testing.md, run scripts/flake-rate.sh before deciding.
Analysis against scripts/compile-cache-e2e.sh §8b, the comment above dead_connect_ms:
The ceiling is (2N - 1/2) x TOTAL = 7000 ms. It tolerates a host stall of up to 3000 ms past the floor of N x TOTAL = 4000 ms.
7602 ms is a stall of about 3600 ms. That matches the round-9 note, "3616 ms for two 1000 ms dials" on a starved runner. A host stall is the plausible reading.
8132 ms is past 2N x TOTAL = 8000 ms, which is the figure a launcher that doubled its deadline reports (measured 8006–8017). Time alone cannot separate "the exchange doubled" from "the host stalled 4.1 s".
So this is the case the rules describe: a time bound that measures the HOST, as rounds 8 and 9 already found on the other legs. The other legs moved from time to a COUNT for this reason.
Raising the 7000 is not the fix. It would stop catching a doubled TOTAL. Candidate directions, each still needs a decision:
Have the launcher trace each exchange's own deadline expiry (armed at, fired at, on its monotonic clock). Judge "did it honour TOTAL" per exchange from that trace, not from the summed direct-ms + cache-ms. A stall between exchanges would then not count against either one.
Keep the summed ceiling, but record a scheduling witness alongside it, such as a sibling process's tick drift over the same window. When the witness shows the host starved, report INCONCLUSIVE, which is a third outcome, not a pass.
Not a regression from #1737: it fails on master (run 39862992304), and #1737 does not touch the cache dial.
Activity
christianparpart commentedon Oct 28, 2026
Analysis against
scripts/compile-cache-e2e.sh§8b, the comment abovedead_connect_ms:(2N - 1/2) x TOTAL= 7000 ms. It tolerates a host stall of up to 3000 ms past the floor of N x TOTAL = 4000 ms.So this is the case the rules describe: a time bound that measures the HOST, as rounds 8 and 9 already found on the other legs. The other legs moved from time to a COUNT for this reason.
Raising the 7000 is not the fix. It would stop catching a doubled TOTAL. Candidate directions, each still needs a decision:
direct-ms + cache-ms. A stall between exchanges would then not count against either one.Not a regression from #1737: it fails on master (run 39862992304), and #1737 does not touch the cache dial.