{"record":{"id":"4121a36928e546e8","repo":"sgl-project/sglang","slug":"invalid-global-segment-size-missing-number-before","errorCode":null,"errorMessage":"Invalid global_segment_size: missing number before 'gb'","messagePattern":"Invalid global_segment_size: missing number before 'gb'","errorType":"validation","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"python/sglang/srt/mem_cache/storage/mooncake_store/mooncake_store.py","lineNumber":78,"sourceCode":"        tensor = torch.frombuffer(c_array, dtype=torch.uint8, count=size)\n\n        if dtype != torch.uint8:\n            element_size = torch.tensor([], dtype=dtype).element_size()\n            assert size % element_size == 0, \"Size must be divisible by element size\"\n            tensor = tensor.view(dtype)\n\n        return tensor.view(dims)\n\n\ndef _parse_global_segment_size(value) -> int:\n    if isinstance(value, int):\n        return value\n    if isinstance(value, str):\n        s = value.strip().lower()\n        if s.endswith(\"gb\"):\n            num = s[:-2].strip()\n            if not num:\n                raise ValueError(\n                    \"Invalid global_segment_size: missing number before 'gb'\"\n                )\n            return int(num) * 1024 * 1024 * 1024\n        return int(s)\n    return int(value)\n\n\ndef _normalize_tenant_id(value) -> str:\n    if value is None:\n        return DEFAULT_TENANT_ID\n    tenant_id = str(value).strip()\n    return tenant_id if tenant_id else DEFAULT_TENANT_ID\n\n\n@dataclass\nclass MooncakeStoreConfig:\n    local_hostname: str\n    metadata_server: str","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/sgl-project/sglang/blob/0132848349585cfe6aae51c4941cbae872505f8a/python/sglang/srt/mem_cache/storage/mooncake_store/mooncake_store.py#L60-L96","documentation":"Parsing global_segment_size rejected a string like 'gb' or '  gb' — the suffix was present but the numeric part was empty. The parser accepts ints, plain numeric strings, or '<N>gb' (converted to bytes).","triggerScenarios":"Passing MooncakeStoreConfig global_segment_size as the literal string 'gb', 'GB', or whitespace-only before the suffix.","commonSituations":"Hand-edited mooncake config JSON with \"global_segment_size\": \"gb\" or a templating variable that expanded to empty.","solutions":["Set a valid value: integer bytes or \"<N>gb\", e.g. \"8gb\" or 8589934592"],"exampleFix":"// before\n{\"global_segment_size\": \"gb\"}\n// after\n{\"global_segment_size\": \"8gb\"}","handlingStrategy":"validation","validationCode":"import re\ndef valid_global_segment_size(v) -> bool:\n    if isinstance(v, int):\n        return v > 0\n    if isinstance(v, str):\n        s = v.strip().lower()\n        if s.endswith('gb'):\n            return bool(re.fullmatch(r'\\d+(\\.\\d+)?', s[:-2].strip()))\n        return s.isdigit()\n    return False","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Validate config files with a schema (pydantic/jsonschema) before launch","Add unit tests for size-string parsing"],"tags":["config","parsing","mooncake","validation"],"backgroundTag":"config-value-parse-failed","analyzedSha":"0132848349585cfe6aae51c4941cbae872505f8a","analyzedAt":"2026-08-28T05:10:05.995Z","schemaVersion":2},"datasetVersion":"2026-08-28T06:17:29.519Z"}