Skip to content

[Generator] Coverage collect steps wait in their command, up to 3 hours, instead of on depends_on - #832

Merged
khluu merged 1 commit into
mainfrom
collect-after-deadline
Oct 19, 2026
Merged

khluu merged 1 commit into
mainfrom
collect-after-deadline

Conversation

@khluu

@khluu khluu commented Oct 18, 2026

Copy link
Copy Markdown
Member

Problem: the fnrec and kernrec collect steps depended on every recording step, with allow_dependency_failure: true. A cancelled or timed-out dependency still ends the step waiting_failed, and a waiting_failed step can't be retried. The full runs 95480, 95553, 95634 and 95663 each had a timed-out shard (language-models-test-extended-pooling 3/4, hung in a ColBERT test; vllm#62279) and published nothing. The ci-selector has been deciding from build 95238's records since Oct 15.

Change:

  • The collect steps now depend only on what the recording steps themselves wait on: the image build, which uploads the kernel symbol map.
  • Their first command polls each recording step through buildkite-agent step get state every 5 minutes. It moves on once all are finished or ignored, or once COLLECT_AFTER_MINUTES (180) has passed since the pipeline was generated, whichever comes first. Then it folds what was uploaded.
  • A job still running at the deadline is left out, and the table reads its shard as missing, as it already does for lost shards.
  • An unreadable state (older agent, missing step) counts as unfinished, so the step waits out the deadline rather than collecting early.
  • The step's timeout is now 180 + 90 minutes.

Cost: the two collect jobs sit on a postmerge CPU agent while waiting, up to 3 hours per full run.

Tests:

  • Updated for the new wiring (CI_SELECTOR_COLLECT_WAIT_FOR replaces depends_on).
  • New test_collect_waits_for_recording_steps_in_its_command_up_to_a_deadline, which also checks every runtime $ is escaped from upload-time interpolation.
  • I ran the wait script by hand against a fake buildkite-agent, for both the "all finished" and the "stuck until deadline" paths.
  • Generator suite: 318 passed.

🤖 Generated with Claude Code

…rs, instead of on depends_on

A collect step depended on every recording step with
allow_dependency_failure, but a cancelled or timed-out dependency still
ends it waiting_failed, and it cannot be retried. The full runs 95480,
95553 and 95634 each had a timed-out shard and published nothing, so the
ci-selector has decided from build 95238's records since 2026-10-15.

The collect steps now depend only on what the recording steps wait on
(the image build, which uploads the kernel symbol map). Their command
polls each recording step's state through buildkite-agent until all have
finished, or until 180 minutes after the pipeline was generated, then
folds what was uploaded.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: khluu <khluu000@gmail.com>
@khluu
khluu merged commit 017078e into main Oct 19, 2026
3 checks passed
AndreasKaratzas added a commit that referenced this pull request Oct 19, 2026
Conflict in test_kernrec.py: main's #832 makes coverage collect steps
wait for the recording steps in their command (CI_SELECTOR_COLLECT_WAIT_FOR,
up to a deadline) and depend only on what those steps wait for, such as
the image build. Kept that, and kept this branch's check that the collector
waits for both the CUDA and the AMD recording step, now through the wait
list. The AMD multi-node and deferred-step tests read the wait list the
same way; the code merged cleanly and needed no change.

Co-Authored-By: Claude <noreply@anthropic.com>
Signed-off-by: Andreas Karatzas <AndreasKaratzas@users.noreply.github.com>
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