Repository navigation
test: stabilize nightly — skip engine-init failures, convert xfails to skips, fix http URL validation regression - #8443
Conversation
test_request_cancellation_vllm_prefill_cancel[nats] and [tcp] have both failed in every one of the last 8 nightly vllm multi-gpu runs on main (16/16 consecutive failures). Failure signature is EngineDeadError: the vLLM engine crashes when the request is cancelled mid-prefill, so the expected "Aborted Prefill Request ID:" log line never appears and the 500ms poll times out. This is the same class of engine-level cancellation bug as the decode twin (test_request_cancellation_vllm_decode_cancel), which is already skipped under DYN-2606 (#8006). Mirror that skip here with a TODO placeholder until the Linear ticket ID is filled in. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
WalkthroughA Changes
Estimated code review effort🎯 1 (Trivial) | ⏱️ ~2 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. 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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@tests/fault_tolerance/cancellation/test_vllm.py`:
- Line 399: The skip decorator on the test (pytest.mark.skip) currently uses the
placeholder "TODO(<LINEAR-ID>)"; replace that placeholder with the actual Linear
ticket ID referenced in the PR (or link to DYN-2606 if that is the correct
tracker) so the skip reason is actionable — update the skip reason string in
tests/fault_tolerance/cancellation/test_vllm.py for the relevant skipped test
decorator and ensure consistency with the skip message used for
test_request_cancellation_vllm_decode_cancel to mirror its format.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 4aee0eeb-f557-4c22-b692-fd80ff34b6ec
📒 Files selected for processing (1)
tests/fault_tolerance/cancellation/test_vllm.py
Three multimodal serve deployment tests have failed in every one of
the last 7 nightly vllm amd64 runs on main (7/7 consistent):
- test_serve_deployment[mm_e_pd_qwen3-vl-2b] (e_pd topology)
- test_serve_deployment[mm_epd_qwen3-vl-2b] (epd topology)
- test_serve_deployment[mm_epd_qwen3-vl-2b-video] (epd topology)
Failure is identical in all three: vLLM v1 engine core initialization
crashes during startup of Qwen/Qwen3-VL-2B-Instruct under the disagg
launch scripts (disagg_multimodal_e_pd.sh, disagg_multimodal_epd.sh),
so the health-check URL never comes up and the test times out.
RuntimeError: Engine core initialization failed. See root cause above.
at vllm/v1/engine/utils.py:1057 wait_for_engine_startup
The matching agg and p_d topology tests pass, so this is specific to
the e_pd/epd scripts. Same class of vLLM engine-init crash as #8411
for mm_agg_qwen2-audio-7b — not flaky, needs real investigation.
Ticket placeholder left on each skipped TopologyConfig.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
Three vllm migration tests are marked @xfail(strict=False) for known architectural limitations: - test_request_migration_vllm_prefill (prefill migration unsupported) - test_request_migration_vllm_kv_transfer (request_id/KV cache reuse) - test_request_migration_vllm_decode (same request_id/KV cache reuse) The last seven nightly vllm multi-gpu runs logged 144 XFAIL results across these three tests with 0 XPASS — every non-skipped parameter combination fails exactly as predicted by the xfail reason. Running them anyway still incurs the per-parameterisation GPU setup cost and generates noise in the nightly report. Convert to @Skip with the same reason strings. No functional change expected: if any of these start passing, the skip reason is the signal to re-enable, same as xfail(strict=False) would have been. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
…lcalling
Two legacy VLLMConfig entries in tests/serve/test_vllm.py started
failing in today's nightly vllm amd64 job with:
Exception: Failed to load image from http://...:
http:// URLs are not allowed; set DYN_MM_ALLOW_INTERNAL=1 to enable
The strict URL validator landed in #8282 and correctly plumbed the
env var through the factory for VLLM_MULTIMODAL_PROFILES-generated
configs in tests/utils/multimodal.py, but missed these two hand-
authored configs that still use http:// URLs (cocodataset HTTP image
and the local test fixture server at localhost:8806).
Set DYN_MM_ALLOW_INTERNAL=1 on both configs so they can load http://
payloads like before, matching what the factory already does for the
mm_* generated configs.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
…(OPS-4446) PR #8404 skipped only the NATS variant of test_request_migration_sglang_aggregated[migration_enabled-max_seq_len_disabled-worker_failure-chat-stream-*] because the TCP variant was stable at the time. Starting from the first post-merge run after that skip landed, the TCP variant began failing with the same symptom (AssertionError: Delay before response > 6 secs, got ~13 secs at utils.py:417) in every run: 24733651809, 24733908729, 24734216001, 24735128282, and onwards. The cause is ordering: when NATS ran first, it warmed the path; with NATS skipped, TCP now pays the cold-start cost itself. Drop the request_plane == "nats" clause so both transports skip, and also replace the stale TODO(<LINEAR-ID>) comment with the OPS-4446 reference that the skip reason string already uses. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
…kips Two concerns in the trtllm nightly `Test cuda13.1 (amd64)` job: 1) Convert xfails → skips in tests/fault_tolerance/cancellation/test_trtllm.py The module-level xfail (pytestmark, strict=True, "Cancellation is temporarily disabled") and the function-level xfail on test_request_cancellation_trtllm_kv_transfer_cancel (strict=False, "Test fails only on CI") have both produced only XFAIL (0 XPASS) across the last 7 nightlies, matching the vllm migration pattern in commit c1cc2fa. Switch to @pytest.mark.skip with the same reason text to stop burning GPU on tests that are definitionally expected to fail. 2) Skip 4 persistent trtllm failures All four have failed in the last 6+ nightlies with the same family of trtllm engine-crash errors (`AssertionError: assert 'error' == 'ok'`, `RuntimeError: Executor worker returned error`, main server dying with exit 1 during health-check): - test_gms_basic_quiesce_resume_trtllm - test_gms_read_only_import_trtllm - test_gms_shadow_engine_failover_trtllm - test_deployment[disaggregated_same_gpu-2] Marked with TODO(<LINEAR-ID>) placeholder — to be swapped for the real Linear ticket(s) before merge. Likely share a single ticket given the identical engine-crash family. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com> Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
Signed-off-by: Dmitry Tokarev <dtokarev@nvidia.com>
…gg tests The three tests were skipped in #8443 while OPS-4445 was investigated. The preceding commit fixes the encode worker's nested vllm.LLM() memory precheck; re-enable the tests under pre_merge so they gate regressions. Leaves the qwen2-audio-7b post_merge skip in place — that is a distinct failure on the agg topology (no encode worker, not addressed here). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
A bundle of nightly-stabilisation changes for the vLLM and SGLang pipelines. Five distinct concerns, each commit-scoped; none overlap.
1. Skip flaky/broken engine-init and cancellation tests
test_request_cancellation_vllm_prefill_cancelintests/fault_tolerance/cancellation/test_vllm.py— commit712761e1f4Both
[nats]and[tcp]parametrizations have failed in every nightlyvllm-pipeline / Multi-gpu test cuda12.9run on main for the last 8 nights (16/16 failures). The vLLM engine dies withEngineDeadErrorwhen cancelling mid-prefill, so the expectedAborted Prefill Request ID:log line is never emitted and the 500 ms poll budget expires. Same class of bug as the twintest_request_cancellation_vllm_decode_cancelalready skipped under DYN-2606 in #8006. Tracked under OPS-4448 (@kthui).Example failing nightlies: 24713014658, 24657547996, 24624817902, 24600680008, 24587232619, 24556217800, 24500822470, 24445034832.
test_serve_deployment[mm_{e_pd,epd}_qwen3-vl-2b]+[mm_epd_qwen3-vl-2b-video]intests/serve/multimodal_profiles/vllm.py— commits32ce9e998e+e4e89963efAll three have failed in every nightly
vllm-pipeline / Test cuda12.9 (amd64)run for the last 7+ nights. Error signature:RuntimeError: Engine core initialization failed(vllm/v1/engine/utils.py:1057 wait_for_engine_startup) — same family as the Qwen2-Audio case skipped in #8411. Only thee_pd/epddisagg topologies fail; the siblingaggandp_dtopologies pass, so this is specific todisagg_multimodal_e_pd.sh/disagg_multimodal_epd.sh. Tracked under OPS-4445.Example failing nightlies: 24713014658, 24657547996, 24624817902, 24600680008, 24587232619, 24556217800, 24500822470, 24445034832.
2. Convert vllm migration xfails → skips
In
tests/fault_tolerance/migration/test_vllm.py— commitc1cc2fa45dThree tests have function-level
@pytest.mark.xfail(strict=False, ...)for known architectural limitations:test_request_migration_vllm_prefill— prefill migration unsupportedtest_request_migration_vllm_kv_transfer— request_id reuse + delay_free_blocks KV cache issuetest_request_migration_vllm_decode— same request_id / KV cache issueLast 7 nightly vllm multi-gpu runs: 144 XFAIL, 0 XPASS, 216 SKIPPED. Every non-skipped parameterisation fails exactly as the xfail reasons predict. Running them anyway still incurs per-param GPU setup cost. Converting to
@pytest.mark.skipwith the same reason strings — no functional change (no XPASS means nothing silently-passing is being masked), just stops wasting GPU time and cleans up the report.3. Fix http:// URL validation regression (NOT a skip — real fix)
In
tests/serve/test_vllm.py— commitd634588d6dToday's nightly flagged two new failures:
test_serve_deployment[multimodal_agg_llava]test_serve_deployment[aggregated_toolcalling]Both error with:
The strict URL validator landed in #8282 (2026-04-20) correctly plumbed
DYN_MM_ALLOW_INTERNAL=1through the factory forVLLM_MULTIMODAL_PROFILES-generated configs (tests/utils/multimodal.py::make_multimodal_configs), but missed these two hand-authoredVLLMConfigentries that still use http:// URLs (cocodataset HTTP image for llava, localhost:8806 fixture server for toolcalling). Adds the same env var on both configs.4. Extend sglang migration skip to TCP transport (OPS-4446)
In
tests/fault_tolerance/migration/test_sglang.py— commitb3ac5ce25e#8404 skipped only the
[nats]variant oftest_request_migration_sglang_aggregated[migration_enabled-max_seq_len_disabled-worker_failure-chat-stream-*]because the TCP sibling was stable at the time. From the very first post-merge run after #8404 landed, the
[tcp]variant began failing with the identical symptom (AssertionError: Delay before response > 6 secs, got ~13 secsatutils.py:417) in every run: 24733651809, 24733908729, 24734216001, 24735128282, and onwards.Cause is test-ordering: when NATS ran first it warmed the path; with NATS skipped, TCP now pays the cold-start cost itself. Dropping the
request_plane == "nats"clause so both transports skip under the same OPS-4446 ticket. Also replaces the staleTODO(<LINEAR-ID>)comment left over from #8404 with the OPS-4446 reference that the skip reason string already uses.5. Skip persistent TRTLLM nightly failures + convert cancellation xfails to skips
In
tests/fault_tolerance/cancellation/test_trtllm.py,tests/gpu_memory_service/test_quiesce_resume.py,tests/gpu_memory_service/test_shadow_failover.py, andtests/serve/test_trtllm.py— commits2dabd67f33+8084d1bf70Convert xfails → skips (same pattern as section 2). Module-level
@pytest.mark.xfail(strict=True, "Cancellation is temporarily disabled")and function-level@pytest.mark.xfail(strict=False, "Test fails only on CI")ontest_request_cancellation_trtllm_kv_transfer_cancelproduced 7/7 XFAIL and 0 XPASS across recent nightlies. Switched to@pytest.mark.skipwith the same reason text.Skip 4 persistent failures. All four have failed in the last 6+/7 nightly amd64 runs:
test_gms_basic_quiesce_resume_trtllmtest_gms_read_only_import_trtllmtest_gms_shadow_engine_failover_trtllmtest_deployment[disaggregated_same_gpu-2]GMS tests fail with
AssertionError: assert 'error' == 'ok'(quiesce/resume/shadow ops returning'error'); the disagg_same_gpu serve test fails withRuntimeError: Main server process exited with code 1 while waiting for health checkandRuntimeError: Executor worker returned error. Likely share a common trtllm-executor root cause. Tracked under OPS-4450.Linear tickets
Files
Test plan
<LINEAR-ID>placeholders replacedvllm-pipelinejobs (Multi-gpu + amd64) pass with the skips and env fixes appliedsglang-amd64job no longer fails on the tcp variant of the migration test🤖 Generated with Claude Code