{"record":{"id":"2f5bb99bac6f5678","repo":"sgl-project/sglang","slug":"extra-config-ssd-backend-must-be-one-of-file","errorCode":null,"errorMessage":"extra_config['ssd_backend'] must be one of: file, spdk, spdk_proxy","messagePattern":"extra_config\\['ssd_backend'\\] must be one of: file, spdk, spdk_proxy","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/mem_cache/storage/umbp/umbp_store.py","lineNumber":363,"sourceCode":"                    UMBPIoBackend.Posix if backend == \"posix\" else UMBPIoBackend.IoUring\n                )\n        if \"ssd_durability_mode\" in extra:\n            # Validate even when the enum is unavailable (older mori / mocks).\n            durability = str(extra[\"ssd_durability_mode\"]).strip().lower()\n            if durability not in (\"strict\", \"sync\", \"relaxed\", \"async\"):\n                raise ValueError(\n                    \"extra_config['ssd_durability_mode'] must be one of: \"\n                    \"strict, sync, relaxed, async\"\n                )\n            if UMBPDurabilityMode is not None:\n                if durability in (\"strict\", \"sync\"):\n                    cfg.ssd.durability.mode = UMBPDurabilityMode.Strict\n                else:\n                    cfg.ssd.durability.mode = UMBPDurabilityMode.Relaxed\n        if \"ssd_backend\" in extra:\n            ssd_backend = str(extra[\"ssd_backend\"]).strip().lower()\n            if ssd_backend not in (\"file\", \"spdk\", \"spdk_proxy\"):\n                raise ValueError(\n                    \"extra_config['ssd_backend'] must be one of: \"\n                    \"file, spdk, spdk_proxy\"\n                )\n            cfg.ssd.ssd_backend = ssd_backend\n        if \"spdk_nvme_pci_addr\" in extra:\n            cfg.ssd.spdk_nvme_pci_addr = str(extra[\"spdk_nvme_pci_addr\"])\n        if \"spdk_proxy_shm_name\" in extra:\n            cfg.ssd.spdk_proxy_shm_name = str(extra[\"spdk_proxy_shm_name\"])\n        if \"spdk_proxy_startup_timeout_ms\" in extra:\n            cfg.ssd.spdk_proxy_startup_timeout_ms = int(\n                extra[\"spdk_proxy_startup_timeout_ms\"]\n            )\n        if \"spdk_proxy_bin\" in extra:\n            cfg.ssd.spdk_proxy_bin = str(extra[\"spdk_proxy_bin\"])\n        if \"spdk_proxy_tenant_id\" in extra:\n            cfg.ssd.spdk_proxy_tenant_id = int(extra[\"spdk_proxy_tenant_id\"])\n        if \"spdk_proxy_tenant_quota_bytes\" in extra:\n            cfg.ssd.spdk_proxy_tenant_quota_bytes = int(","sourceCodeStart":345,"sourceCodeEnd":381,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/mem_cache/storage/umbp/umbp_store.py#L345-L381","documentation":"extra_config['ssd_backend'] selects the SSD implementation and must be 'file', 'spdk', or 'spdk_proxy'; other values are rejected in the UMBP store constructor.","triggerScenarios":"Setting ssd_backend to 'aio', 'io_uring', or a typo like 'spdk-proxy' (underscore required).","commonSituations":"Confusing ssd_backend (implementation) with ssd_io_backend (IO engine) and using the wrong vocabulary in one of them.","solutions":["Set ssd_backend to file, spdk, or spdk_proxy (use underscores)","If you meant the IO engine, use ssd_io_backend with posix/io_uring instead"],"exampleFix":"# before\nextra['ssd_backend'] = 'io_uring'\n# after\nextra['ssd_backend'] = 'file'\nextra['ssd_io_backend'] = 'io_uring'","handlingStrategy":"validation","validationCode":"assert str(extra.get('ssd_backend','')).strip().lower() in ('file','spdk','spdk_proxy')","typeGuard":"def is_valid_ssd_backend(v) -> bool:\n    return isinstance(v, str) and v.strip().lower() in ('file','spdk','spdk_proxy')","tryCatchPattern":null,"preventionTips":["Remember ssd_backend (file/spdk/spdk_proxy) vs ssd_io_backend (posix/io_uring) vocabulary","Lint UMBP extra_config in CI"],"tags":["umbp","config-validation","ssd"],"backgroundTag":"invalid-enum-value","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}