{"record":{"id":"6ddc8cb3ea0fe1a0","repo":"risingwavelabs/risingwave","slug":"env-variable-rw-hummock-url-not-found-start","errorCode":null,"errorMessage":"env variable `RW_HUMMOCK_URL` not found.\n\n* start the cluster with shared storage:\n- consider adding `use: minio` in the risedev config,\n- or directly use `./risedev d for-ctl` to start the cluster.\n* use `./risedev ctl` to use risectl.\n\nFor production use cases,\n* please set `RW_HUMMOCK_URL` to the same address specified for the meta node.","messagePattern":"env variable `RW_HUMMOCK_URL` not found\\.\n\n\\* start the cluster with shared storage:\n- consider adding `use: minio` in the risedev config,\n- or directly use `\\./risedev d for-ctl` to start the cluster\\.\n\\* use `\\./risedev ctl` to use risectl\\.\n\nFor production use cases,\n\\* please set `RW_HUMMOCK_URL` to the same address specified for the meta node\\.","errorType":"exception","errorClass":"anyhow::Error","httpStatus":null,"severity":"error","filePath":"src/ctl/src/common/hummock_service.rs","lineNumber":86,"sourceCode":"                    return Err(anyhow!(\n                        \"only url starting with 'hummock+' is supported in risectl\"\n                    ));\n                }\n                tracing::info!(\"using Hummock URL from `RW_HUMMOCK_URL`: {}\", url);\n                url\n            }\n            Err(_) => {\n                const MESSAGE: &str = \"env variable `RW_HUMMOCK_URL` not found.\n                    For `./risedev d` use cases, please do the following.\n                    * start the cluster with shared storage:\n                    - consider adding `use: minio` in the risedev config,\n                    - or directly use `./risedev d for-ctl` to start the cluster.\n                    * use `./risedev ctl` to use risectl.\n\n                    For production use cases,\n                    * please set `RW_HUMMOCK_URL` to the same address specified for the meta node.\n                \";\n                bail!(MESSAGE);\n            }\n        };\n\n        Ok(Self {\n            hummock_url,\n            data_dir,\n            heartbeat_handle: None,\n            heartbeat_shutdown_sender: None,\n            use_new_object_prefix_strategy,\n        })\n    }\n\n    fn get_storage_opts(&self) -> StorageOpts {\n        let mut opts = StorageOpts {\n            share_buffer_compaction_worker_threads_number: 0,\n            meta_cache_capacity_mb: 1,\n            block_cache_capacity_mb: 1,\n            meta_cache_shard_num: 1,","sourceCodeStart":68,"sourceCodeEnd":104,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/ctl/src/common/hummock_service.rs#L68-L104","documentation":"HummockService::from_env requires the RW_HUMMOCK_URL environment variable; if it is unset the operation bails with a detailed message explaining how to get one (shared-storage cluster, `./risedev d for-ctl`, or setting the var manually for production). risectl cannot access Hummock state without knowing the storage backend location.","triggerScenarios":"Running risectl commands that need state-store access (e.g. hummock scan, table scan) in a shell where RW_HUMMOCK_URL was never exported — typically when the cluster was started without shared storage or in a different shell session.","commonSituations":"Cluster started with in-memory/local storage instead of minio; opening a fresh terminal without the env var; production deployment where the operator forgot to export RW_HUMMOCK_URL to match the meta node's state store.","solutions":["Add `use: minio` to the risedev config so the cluster uses shared storage, then restart with `./risedev d`.","Or start the cluster with `./risedev d for-ctl`, which sets RW_HUMMOCK_URL automatically.","Or manually export RW_HUMMOCK_URL to the same state-store address configured on the meta node (with the hummock+ prefix).","Prefer `./risedev ctl` for local use, which wires up the env vars for you."],"exampleFix":"// before\n./risedev ctl hummock scan-table\n// after\nexport RW_HUMMOCK_URL=\"hummock+minio://hummock01:hummock01@127.0.0.1:9301/hummock01\"\n./risedev ctl hummock scan-table","handlingStrategy":"validation","validationCode":"if (!process.env.RW_HUMMOCK_URL) { throw new Error(\"RW_HUMMOCK_URL is not set; use ./risedev d for-ctl or export it manually\"); }","typeGuard":null,"tryCatchPattern":"runCtl().catch(e => {\n  if (String(e).includes(\"RW_HUMMOCK_URL\")) {\n    console.error(\"Set RW_HUMMOCK_URL (hummock+...) or start with `./risedev d for-ctl`\");\n  } else throw e;\n});","preventionTips":["Start dev clusters with shared storage (`use: minio`) so the var is meaningful","Use `./risedev ctl` wrapper instead of invoking binaries directly","Export RW_HUMMOCK_URL in shell profile / CI environment for production-like runs"],"tags":["risectl","hummock","env","configuration"],"backgroundTag":"missing-env-var","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}