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
async-eval: sidecar auto-disable now fires on dead sidecars
The toy end-to-end test surfaced exactly the gap Codex flagged:
sidecars submitted successfully but died in <2s (rocm dep resolver
error inside the sidecar's uv run), and the callback didn't disable
because the sidecar-mode failure counter only tracked SUBMISSION
errors. Dead sidecars detected by ``_sweep_stale_markers`` were
cleared but never counted.
This is the parallel of the reserved-mode bug already fixed: each
``_fire`` was also doing ``self._consecutive_failures = 0`` on
successful submit, which would wipe any sweep-detected failures.
Fixes:
1. ``_clear_marker_if_stale`` returns ``bool`` (True iff cleared).
``_sweep_stale_markers`` aggregates the clears and increments
``_consecutive_failures`` accordingly — each cleared orphan is a
sidecar whose bash trap didn't fire (slurmstepd OOM, NODE_FAIL,
scancel --signal=KILL).
2. ``_fire`` no longer resets the counter on successful submit. The
counter only ratchets upward; submission failures AND sweep-cleared
orphans both contribute to the auto-disable threshold. Sidecar mode
has no positive feedback signal (bash trap removing a marker isn't
observable to us), so any reset would risk wiping unprocessed
failures.
3. ``sbatch_template.py``: sidecar sub-jobs now ``uv run --no-sync``
to reuse the parent's resolved venv. Without this, an upstream
wheel-index churn (e.g. vllm rocm wheels yanked) crashes every
sidecar before it starts. Matches the cluster convention already
used in the cookbook launchers per CLAUDE.md.
4. Toy fixture launchers (``toy_async_eval_*.sh``) also switched to
``uv run --no-sync``.
Regression tests:
- ``test_dead_sidecars_disable_callback`` — drops 3 orphan markers,
stubs sacct=FAILED, asserts counter=3 and ``_disabled=True``.
- Existing ``test_failure_disables_after_max_consecutive`` still
pins the submit-failure path (both modes accumulate).
440 passed / 12 skipped, full repo clean.
0 commit comments