Files
agentic-pd-hybrid/third_party/sglang/python
Claude Code Agent 86412bb174 feat(sglang): D→P snapshot link integration — controller + RPC handlers
Phase 2 of the D→P sync feature (Phase 1 in dc4867c verified the
underlying RDMA link in isolation). This commit wires that link into
each SGLang worker's scheduler so D and P can exchange session KV
without going through the PD prefill pipeline.

New module:
  third_party/sglang/python/sglang/srt/disaggregation/snapshot/
    controller.py — SnapshotLinkController owns one mooncake transfer
                    engine per worker, pre-registers all kv_pool layer
                    buffers, and exposes prepare_receive() and
                    push_session_kv() APIs. Receive bookkeeping via
                    a session_id → SnapshotIngestRecord side-table.

Three RPC types added to io_struct.py and full plumbing wired through:
  SnapshotPrepareReceiveReqInput/Output   P-side alloc + return layout
  SnapshotDumpReqInput/Output             D-side read kv_pool + RDMA push
  SnapshotFinalizeIngestReqInput/Output   P-side radix tree insert

Files touched:
  managers/io_struct.py                   3 new ReqInput/ReqOutput pairs
  managers/tokenizer_communicator_mixin.py  3 communicators, 3 awaitables
  managers/scheduler.py                   init controller + 3 handlers
  entrypoints/http_server.py              3 HTTP endpoints under /_snapshot

Activation: set SGLANG_SNAPSHOT_LINK_ENABLE=1 (and
SGLANG_SNAPSHOT_LINK_HOST / _PORT / _IB_DEVICE) per worker. Controller
init is opt-in and defaults off, so production PD pipeline is
untouched.

Subsequent work (Phase 3): agentic-pd-hybrid orchestration in
_invoke_kvcache_seeded_router to call prepare_receive on P, dump on
D-old, finalize_ingest on P, then trigger the existing P→D' transfer
which will now hit P's radix cache (skipping re-prefill).
2026-05-13 08:12:04 +08:00
..