{"record":{"id":"d2a24b9553964af6","repo":"sgl-project/sglang","slug":"pd-decode-dcp-currently-requires-chunk-cache-di","errorCode":null,"errorMessage":"PD decode DCP currently requires chunk cache; --disaggregation-decode-enable-radix-cache is not supported.","messagePattern":"PD decode DCP currently requires chunk cache; --disaggregation-decode-enable-radix-cache is not supported\\.","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/arg_groups/pd_disaggregation_hook.py","lineNumber":64,"sourceCode":"            \"use the same DCP layout, but it usually adds communication \"\n            \"overhead without improving prefill performance.\"\n        )\n\n    if cfg.disaggregation_mode == \"decode\" and cfg.dcp_size > 1:\n        # Fake transfer moves no KV and is only used for synthetic decode\n        # benchmarks, so it does not need the DCP relayout from Mooncake/NIXL.\n        if cfg.disaggregation_transfer_backend not in (\n            \"mooncake\",\n            \"nixl\",\n            \"fake\",\n        ):\n            raise ValueError(\n                \"PD decode DCP requires --disaggregation-transfer-backend \"\n                \"mooncake, nixl, or fake for synthetic benchmarking, got \"\n                f\"{cfg.disaggregation_transfer_backend!r}.\"\n            )\n        if cfg.disaggregation_decode_enable_radix_cache:\n            raise ValueError(\n                \"PD decode DCP currently requires chunk cache; \"\n                \"--disaggregation-decode-enable-radix-cache is not supported.\"\n            )\n        if cfg.enable_hierarchical_cache:\n            raise ValueError(\n                \"PD decode DCP currently requires chunk cache; \"\n                \"--enable-hierarchical-cache is not supported.\"\n            )\n\n    if cfg.disaggregation_mode == \"decode\":\n        if cfg.disaggregation_decode_enable_radix_cache:\n            if cfg.enable_hisparse:\n                raise ValueError(\n                    \"--disaggregation-decode-enable-radix-cache is incompatible \"\n                    \"with --enable-hisparse\"\n                )\n            if cfg.disaggregation_transfer_backend == \"fake\":\n                raise ValueError(","sourceCodeStart":46,"sourceCodeEnd":82,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/arg_groups/pd_disaggregation_hook.py#L46-L82","documentation":"PD decode DCP currently requires chunk-cache semantics on the decode side, so enabling --disaggregation-decode-enable-radix-cache alongside DCP is rejected. DCP's KV layout/protection assumes chunk cache behavior.","triggerScenarios":"PD decode DCP enabled together with --disaggregation-decode-enable-radix-cache.","commonSituations":"Tuning decode-side cache reuse for prefix-heavy workloads on a disaggregated deployment and enabling radix cache without realizing DCP forbids it.","solutions":["Remove --disaggregation-decode-enable-radix-cache when using PD decode DCP","If decode radix cache is required, disable the DCP feature"],"exampleFix":"# before\n<DCP flags> --disaggregation-decode-enable-radix-cache\n# after\n<DCP flags>","handlingStrategy":"validation","validationCode":"if dcp_enabled:\n    cfg.disaggregation_decode_enable_radix_cache = False","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat DCP as mutually exclusive with decode radix cache in config generation"],"tags":["sglang","pd-disaggregation","dcp","radix-cache","config-conflict"],"backgroundTag":"feature-incompatibility","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}