sgl-project/sglang · error · RuntimeError

The installed Mooncake version does not support tenant_id in

Error message

The installed Mooncake version does not support tenant_id in MooncakeDistributedStore.setup(). Please upgrade Mooncake to use non-default Mooncake tenants with SGLang.

What it means

MooncakeDistributedStore.setup() rejected a tenant_id keyword, a TypeError that SGLang detects and converts into an explicit 'installed Mooncake is too old' RuntimeError. It only fires when a non-default Mooncake tenant_id was configured for the embedding store.

Source

Thrown at python/sglang/srt/mem_cache/storage/mooncake_store/mooncake_embedding_store.py:39

        self.store = MooncakeDistributedStore()
        self.config = self._load_config(storage_config)
        setup_kwargs = {}
        if self.config.tenant_id != DEFAULT_TENANT_ID:
            setup_kwargs["tenant_id"] = self.config.tenant_id
        try:
            ret_code = self.store.setup(
                self.config.local_hostname,
                self.config.metadata_server,
                self.config.global_segment_size,
                16 * 1024 * 1024,  # Internal local buffer size
                self.config.protocol,
                self.config.device_name,
                self.config.master_server_address,
                **setup_kwargs,
            )
        except TypeError as e:
            if "tenant_id" in setup_kwargs and "tenant_id" in str(e):
                raise RuntimeError(
                    "The installed Mooncake version does not support tenant_id "
                    "in MooncakeDistributedStore.setup(). Please upgrade "
                    "Mooncake to use non-default Mooncake tenants with SGLang."
                ) from e
            raise
        if ret_code != 0:
            raise RuntimeError(f"Failed to setup Mooncake Embedding Store: {ret_code}")

        logger.info("Mooncake Embedding Store initialized successfully.")

    def get_key(self, mm_hash: str) -> str:
        return f"emb_{mm_hash}"

    def batch_get(
        self, hashes: List[str], ptrs: List[int], sizes: List[int]
    ) -> List[bool]:
        keys = [self.get_key(h) for h in hashes]
        results = self.store.batch_get_into(keys, ptrs, sizes)

View on GitHub (pinned to 0132848349)

Solutions

  1. pip install mooncake-transfer-engine --upgrade
  2. Or remove/unset tenant_id so the default tenant is used
Defensive patterns

Strategy: type-guard

Validate before calling

import inspect
from mooncake.store import MooncakeDistributedStore
SUPPORTS_TENANT = 'tenant_id' in inspect.signature(MooncakeDistributedStore.setup).parameters
if tenant_id and tenant_id != 'default' and not SUPPORTS_TENANT:
    raise SystemExit('upgrade mooncake-transfer-engine or unset tenant_id')

Type guard

def mooncake_supports_tenant() -> bool:
    import inspect
    from mooncake.store import MooncakeDistributedStore
    return 'tenant_id' in inspect.signature(MooncakeDistributedStore.setup).parameters

Try / catch

try:
    store = MooncakeEmbeddingStore(cfg)
except RuntimeError as e:
    if 'tenant_id' in str(e):
        # fall back to default tenant
        cfg.tenant_id = 'default'
        store = MooncakeEmbeddingStore(cfg)
    else:
        raise

Prevention

When it happens

Trigger: Constructing MooncakeEmbeddingStore with a tenant_id set (via config/env) while the installed mooncakestore package's setup() signature lacks tenant_id (older mooncake).

Common situations: Upgrading SGLang but keeping an old mooncake-transfer-engine; setting MOONCAKE_TENANT_ID or tenant_id in the mooncake config file with a legacy Mooncake build.

Related errors


AI-assisted analysis of sgl-project/sglang@0132848349 (2026-08-28). Data as JSON: /api/errors/33a982f31e95bb1d. Report an issue: GitHub.