Files
sglang/python
laoyao0822 f3cf95c0f1 Release decode transfer state on abort paths
Decode prealloc and transfer queues own the receiver lifetime once a request leaves the queue. The abort and transfer-failure paths were removing requests after streaming/releasing KV state without clearing the receiver, leaving backend-specific request tracking behind. The scheduler idle check also ignored decode retracted requests, so idle housekeeping could run while decode handoff state still existed.

Constraint: This is a manual port of upstream 18989f3d48 onto a locally diverged decode queue implementation.

Rejected: Direct cherry-pick | current decode queue compaction and streamer APIs differ from upstream.

Confidence: high

Scope-risk: narrow

Directive: Any path that removes a DecodeRequest from prealloc or transfer ownership must clear its kv_receiver unless ownership is explicitly transferred.

Tested: remote cjy-glm5-new pytest test/registered/unit/disaggregation/test_decode_queue_compaction.py -q: 16 passed

Tested: remote cjy-glm5-new pytest test/registered/unit/disaggregation/test_decode_queue_compaction.py test/registered/unit/observability/test_scheduler_metrics_load.py -q: 17 passed

Tested: git diff --check on modified files

Not-tested: full disaggregated decode E2E under live traffic
2026-06-29 03:16:14 +08:00
..
2026-06-10 05:54:43 +08:00