risingwavelabs/risingwave · error

state store is not supported

Error message

{} state store is not supported

What it means

Guard in StateStoreImpl::new: the configured state store identifier did not match any supported backend (`hummock`, `in_memory`, `sled://...`). The operator-supplied state_store string is unrecognized, so the node cannot construct a state store and fails at startup.

Solutions

  1. Correct the state store setting to a supported engine (e.g. hummock, in-memory, sled)
  2. Check release notes/config docs for renamed or removed state store types
  3. Verify the binary was built with the required feature flags for the intended engine

Example fix

// before (config)
state_store = "tikv://127.0.0.1:2379"
// after
state_store = "hummock+memory"
Defensive patterns

Strategy: validation

Validate before calling

const SUPPORTED: [&str; 3] = ["hummock", "in-memory", "sled"];
fn is_supported(engine: &str) -> bool {
    SUPPORTED.contains(&engine.split("://").next().unwrap_or(engine))
}

Prevention

When it happens

Trigger: Configuring a state store engine string (e.g. in the `state_store` config) that is not one of the supported variants (hummock, in-memory, sled, etc.), reaching the `other => unimplemented!` arm.

Common situations: Typos or deprecated engine names in the configuration file, using an engine removed in a newer RisingWave version, or copying a config from an incompatible build (non-production feature flags).

Related errors


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/3f1ace52f1780fb6. Report an issue: GitHub.

Appendix: source

Thrown at src/storage/src/store_impl.rs:1007

                StateStoreImpl::hummock(inner, storage_metrics)
            }

            "in_memory" | "in-memory" => {
                tracing::warn!(
                    "In-memory state store should never be used in end-to-end benchmarks or production environment. Scaling and recovery are not supported."
                );
                StateStoreImpl::shared_in_memory_store(storage_metrics.clone())
            }

            sled if sled.starts_with("sled://") => {
                tracing::warn!(
                    "sled state store should never be used in end-to-end benchmarks or production environment. Scaling and recovery are not supported."
                );
                let path = sled.strip_prefix("sled://").unwrap();
                StateStoreImpl::sled(SledStateStore::new(path), storage_metrics.clone())
            }

            other => unimplemented!("{} state store is not supported", other),
        };

        Ok(store)
    }
}

pub trait AsHummock: Send + Sync {
    fn as_hummock(&self) -> Option<&HummockStorage>;

    fn sync(
        &self,
        sync_table_epochs: Vec<(HummockEpoch, HashSet<TableId>)>,
    ) -> BoxFuture<'_, StorageResult<SyncResult>> {
        async move {
            if let Some(hummock) = self.as_hummock() {
                hummock.sync(sync_table_epochs).await
            } else {
                Ok(SyncResult::default())

View on GitHub (pinned to 6469eb736d)