|
| 1 | +# Upstream vLLM P2P issues: map + coverage |
| 2 | + |
| 3 | +Maps the three filed upstream issues to the two internal defect catalogs |
| 4 | +(`p2p-pd-defects.md`, `p2p-lookup-hangs.md`) and states what remains after |
| 5 | +each upstream fix lands. All three issues are OPEN as of 2026-07-25. |
| 6 | + |
| 7 | +## The three issues (distinct bugs, distinct layers) |
| 8 | + |
| 9 | +| issue | what it is | layer / file | crash or stall | catalog | fix PR | |
| 10 | +|---|---|---|---|---|---| |
| 11 | +| #49635 | late KV-offload store after request finalization -> `KeyError` (`_req_state` deleted at `tiering/manager.py:721`, indexed unguarded at `:542` via `scheduler.py:1045 _build_store_jobs`) | OffloadingConnector store path -- NOT P2P-specific | crash | neither catalog | #49671 (open) | |
| 12 | +| #49809 | reconnect to a reaped peer trips `AssertionError: ZmqConnection already exists`; dead conn never released | P2P control transport (`tiering/p2p/control/zmq.py`) | crash | pd-defects Defect 2 | #49823 (open) | |
| 13 | +| #49820 | symmetric producer accepts a fetch it cannot serve, never sends `TransferDone(success=False)` -> consumer deferred full `_LOAD_TIMEOUT_S=30s` | P2P session (`tiering/p2p/session/*`) | stall | new (post-Liran residual) | none | |
| 14 | + |
| 15 | +Distinguishing axis: #49635 is OffloadingConnector-general (fires even |
| 16 | +aggregated / no P2P); #49809 and #49820 are P2P-tier-specific but different |
| 17 | +sub-layers (control transport vs session). |
| 18 | + |
| 19 | +## Coverage: are those three enough? |
| 20 | + |
| 21 | +No. After #49635 (->#49671), #49809 (->#49823), #49820 (->future fix), and |
| 22 | +Liran's #48021 all land: |
| 23 | + |
| 24 | +| defect | covered by | patch still needed? | |
| 25 | +|---|---|---| |
| 26 | +| #49635 finalization crash | #49671 | no | |
| 27 | +| #49809 reconnect crash | #49823 | no | |
| 28 | +| #49820 symmetric-fetch 30s stall | #49820 fix (TBD) | no, once written | |
| 29 | +| lookup-hangs Defect 1 (duplicate-fetch teardown) | Liran's one-fetch contract in #48021 (`dupfetch=0` on a version-matched engine) | no | |
| 30 | +| lookup-hangs Defect 2 (pop-on-read MISS livelock) | Liran's `register_lookup` retains resolved HIT+MISS until fetch/finish (no pop-on-read) = the sticky-MISS. VERIFIED in `client.py` @145a460c | no (`defect12` Part 2 redundant) | |
| 31 | +| lookup-hangs Defect 3 (`HIT_PENDING` write-in-flight, no deadline in UPSTREAM `tiering/manager.py`) | nothing | YES -- `defect3_fix_pending-wait-deadline.diff`, or file upstream | |
| 32 | + |
| 33 | +Softer gap: `defect12` Part 1 (lookup-phase deadline) is NOT in Liran's branch |
| 34 | +-- only `_LOAD_TIMEOUT_S=30` on the fetch phase, no deadline on a stranded |
| 35 | +lookup probe. Defense-in-depth: bites only if the one-fetch contract is |
| 36 | +violated and a session tears down, stranding a lookup that hangs the full |
| 37 | +300s. Latent on a version-matched engine where the contract holds. |
| 38 | + |
| 39 | +## Numbering caveat |
| 40 | + |
| 41 | +Two catalogs both start at "Defect 1", causing collisions: |
| 42 | +- `p2p-pd-defects.md`: Defect 1 = cross-TP block identity (upstream |
| 43 | + `file_mapper.py`, vllm#48414); Defect 2 = reconnect crash (= #49809). |
| 44 | +- `p2p-lookup-hangs.md`: Defect 1 = duplicate-fetch teardown; Defect 2 = MISS |
| 45 | + livelock; Defect 3 = `HIT_PENDING` no-deadline. |
| 46 | + |
| 47 | +## Net |
| 48 | + |
| 49 | +Two crashes fixed (#49635, #49809), the 30s stall fixed (#49820), and |
| 50 | +lookup-hangs Defect 1+2 covered by #48021. The remaining real bug is |
| 51 | +lookup-hangs Defect 3 -- an upstream `tiering/manager.py` hang untouched by any |
| 52 | +P2P issue. |
| 53 | + |
| 54 | +VERIFIED 2026-07-25 against `main`@70009fb9: `TieringManager.lookup()` still |
| 55 | +returns `LookupResult.HIT_PENDING` bare, with no deadline. Upstream added only |
| 56 | +observability around it (`secondary_lookup_start_time`, `sync_lookup_delay` |
| 57 | +accumulation) -- no bound, no downgrade-to-MISS. So Defect 3 is LIVE in main; |
| 58 | +`defect3_fix_pending-wait-deadline.diff` is still required. Not filed upstream |
| 59 | +-> candidate for a companion issue to #49809/#49820. |
0 commit comments