Skip to content

fix(bench): a paired base that hangs ends after ten silent minutes - #8650

Merged
kixelated merged 2 commits into
mainfrom
quest/m0/nightly/lite06-join-hang
Nov 13, 2026
Merged

kixelated merged 2 commits into
mainfrom
quest/m0/nightly/lite06-join-hang

Conversation

@kixelated

@kixelated kixelated commented Nov 13, 2026 •

Copy link
Copy Markdown
Collaborator

Claims quest/m0/nightly/lite06-join-hang.md.

Summary

The lite-06 join fix worked; the 2026-11-13 Nightly's relay job still timed out because of its paired base, not the current tree.

  • just gh nightly rust-relay builds the previous scheduled Nightly's commit (here 997ae11, from 2026-11-12 15:39Z, before the fix merged at 16:57Z) and runs its benchmarks first. That base still has the lite-06 join hang, so criterion-base: moq-relay/session stopped at relay_session_join_broadcasts/moq-lite-06/relays=1/... and nothing ran for 45 minutes until the hour cancelled the job. The current tree never started.
  • The Rust bench targets job was cancelled for the same reason: its base moq-net/session stopped at session_join_broadcasts/moq-lite-06/relays=1/....
  • bench/run.sh already treats a failed base as "unavailable", but a base that never exits was unbounded. criterion_exec now kills a target that prints nothing for BENCH_CRITERION_IDLE_SECONDS (default 600) and fails that run, naming the last line it printed. A hung base marks its target unavailable (still failing the paired gate loudly); a hung current target fails the run with the hung case named instead of a cancelled job with no artifacts.
  • Criterion prints at the start and end of every case, so 600s is far above the longest quiet stretch (a whole relay session pass takes about 4 minutes on a loaded 32-core host, every case a few seconds).
  • Tonight's nightly pairs with 7df2ebf, which has the fix, so this specific hang heals on its own; the bound keeps the next bad base from repeating it.

Quest: Plan and Waiting rewritten to wait for the first scheduled Nightly after this lands.

Validation

  • Reproduced: BENCH_BASE=997ae11 just gh nightly rust-relay on the old run.sh hung at the same case; cancelled by my 30 minute cap after zero output.
  • After: the same command (idle bound set to 120s for the test) killed the base after 120s with Criterion moq-relay/session hung: no output for 120s after: Benchmarking relay_session_join_broadcasts/moq-lite-06/relays=1/..., ran the current tree's moq-relay/session through every cell, and finished in 11.5 minutes with UNAVAILABLE moq-relay/session: base run failed and a report (52 faster, 74 unchanged).
  • Current tree alone: the whole relay session bench in quick mode finishes all 431 cells in 3m42s locally, including every moq-lite-06 join_broadcasts/join_stale cell.
  • bench/build.slow.test.py gains a hangs base (prints, then parks); just check passes.

Other failures in that Nightly run (not fixed here)

  • Nightly (JS benchmarks): js/net/bench/requests.ts:55 throws wrong publisher instance.
  • Fuzz (varint, lite, session_lite, ...): moq-net fails to build under the fuzz profile (a deprecated fetch_update, 1 error).
  • Audio quality: chromium av_lag_ms thresholds exceeded (e.g. congestion p95 1434 ms against 32).
  • Media (firefox player): just test interop --media fails.
  • Nightly (Python audit), Gate cost, Shipping sizes failed and features / Features was cancelled; I did not look into their causes.
  • Rust bench targets: same base hang as above, fixed by this change.

Public API and wire

None (bench tooling only).

Decisions (taken without prompting)

  • Idle (silence) bound rather than a total wall-clock cap per target: a slow-but-progressing target is never cut off. Recommend keeping.
  • Applied to the current side and confirmation rounds too, not only the base. Recommend keeping: a hang fails fast with the case named.
  • The other failing jobs get their own quests rather than riding in this PR, as the task asked.

Follow-ups

  • A quest per unrelated failure above (JS requests bench, fuzz build, audio quality, firefox media, Python audit, gate cost, R2 credentials).

Models

Size: XS
Implementer: Claude Code, claude-sonnet-5-5, unknown effort

(Written by Sonnet 5.5)

🤖 Generated with Claude Code

Review

Rewritten by quest review after each round.

  • Head: 2930804

  • Base: origin/main at b852a32

  • Reviewer: Codex, gpt-6.1-sol, medium effort

  • Session: 01a1d64c-1fd7-7aa0-9f54-15ee045d9e5f, round 1

  • Score: 9/10, No actionable defects were found; timeout handling preserves current results when a paired base hangs, though builds and tests were not run as instructed.

  • Rounds: 1; findings 0: fixed 0, refuted 0, open 0

  • Findings: none

kixelated and others added 2 commits November 13, 2026 09:18
…stead of holding the Nightly leg to its hour

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@kixelated kixelated changed the title A scheduled Nightly's relay session job finishes inside its hour fix(bench): a paired base that hangs ends after ten silent minutes Nov 13, 2026
@kixelated
kixelated marked this pull request as ready for review November 13, 2026 19:05
@coderabbitai

coderabbitai Bot commented Nov 13, 2026

Copy link
Copy Markdown
Contributor

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 31 minutes.

Check out review usage here.

View limit details

Limit details: You’ve used all 4 included reviews currently available.

Learn how review limits work.

Review configuration:

Run configuration

  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: a6e20125-6f88-44a4-af84-03f3b58581a5
Commits

Reviewing files that changed from the base of the PR and between 8206d7f and 2930804.

Files selected for processing: 4

  • bench/README.md
  • bench/build.slow.test.py
  • bench/run.sh
  • quest/m0/nightly/lite06-join-hang.md
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

Share

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes

Reviewed the idle bound added to criterion_exec and how its failure flows into the paired base, current, and confirmation paths.

  • Idle-bounded criterion_exec: the target's stdout is now read through a process-substitution fd. Each line has a read -t window, so a target that prints nothing for BENCH_CRITERION_IDLE_SECONDS (default 600) gets SIGKILLed and returns 1, and the error names the last line it printed. When the target finishes normally, criterion_exec still returns the target's exit status through wait "$pid".
  • Caller behavior: nothing changed in the callers, but the new failure now reaches them. A hung base marks its target base run failed, a hung current target sets status=1, and a hung confirmation round marks its target confirmation failed.
  • Slow test: bench/build.slow.test.py gains a hangs base that prints a line and then parks. It checks for the hung message and the base run failed unavailable entry. I ran it locally and it passes in about 29s on bash 5.3.
  • Docs and quest: the README now describes the bound, and the quest's Plan and Waiting now wait on the first scheduled Nightly after the bound lands.

Pullfrog  | View workflow run | Using claude-opus-5-5 | 𝕏

@kixelated
kixelated added this pull request to the merge queue Nov 13, 2026
Merged via the queue into main with commit 697c4c8 Nov 13, 2026
14 checks passed
@kixelated
kixelated deleted the quest/m0/nightly/lite06-join-hang branch November 13, 2026 20:05
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