risingwavelabs/risingwave · critical
OBS_ENDPOINT not found from environment variables
Error message
OBS_ENDPOINT not found from environment variables
What it means
new_obs_engine requires the Huawei OBS endpoint via the OBS_ENDPOINT environment variable and panics when it is unset, since the OpenDAL obs builder needs an endpoint to build the client. The process aborts during object store initialization.
Source
Thrown at src/object_store/src/object/opendal_engine/obs.rs:38
use risingwave_common::config::ObjectStoreConfig;
use super::{MediaType, OpendalObjectStore, new_operator};
use crate::object::ObjectResult;
use crate::object::object_metrics::ObjectStoreMetrics;
impl OpendalObjectStore {
/// create opendal obs engine.
pub fn new_obs_engine(
bucket: String,
root: String,
config: Arc<ObjectStoreConfig>,
metrics: Arc<ObjectStoreMetrics>,
) -> ObjectResult<Self> {
// Create obs backend builder.
let mut builder = Obs::default().bucket(&bucket).root(&root);
let endpoint = std::env::var("OBS_ENDPOINT")
.unwrap_or_else(|_| panic!("OBS_ENDPOINT not found from environment variables"));
let access_key_id = std::env::var("OBS_ACCESS_KEY_ID")
.unwrap_or_else(|_| panic!("OBS_ACCESS_KEY_ID not found from environment variables"));
let secret_access_key = std::env::var("OBS_SECRET_ACCESS_KEY").unwrap_or_else(|_| {
panic!("OBS_SECRET_ACCESS_KEY not found from environment variables")
});
builder = builder
.endpoint(&endpoint)
.access_key_id(&access_key_id)
.secret_access_key(&secret_access_key);
let op = new_operator(
&config,
Operator::new(builder)?.layer(LoggingLayer::default()),
);
Ok(Self {
op,View on GitHub (pinned to 6469eb736d)
Solutions
- Export OBS_ENDPOINT (e.g. https://obs.<region>.myhuaweicloud.com) before starting RisingWave
- Add the env var to your Kubernetes/docker deployment config
- Verify the variable is visible to the process (env | grep OBS)
- Set OBS_ACCESS_KEY_ID and OBS_SECRET_ACCESS_KEY as well — the next panic will otherwise come from those
Example fix
# before docker run risingwave/risingwave ... # OBS_ENDPOINT unset -> panic # after docker run -e OBS_ENDPOINT=https://obs.cn-north-4.myhuaweicloud.com \ -e OBS_ACCESS_KEY_ID=... -e OBS_SECRET_ACCESS_KEY=... risingwave/risingwave ...
Defensive patterns
Strategy: validation
Validate before calling
// Preflight all three OBS variables before starting
for var in ["OBS_ENDPOINT", "OBS_ACCESS_KEY_ID", "OBS_SECRET_ACCESS_KEY"] {
if std::env::var(var).is_err() {
eprintln!("{} must be set for obs:// object store", var);
std::process::exit(1);
}
} Prevention
- Set OBS_ENDPOINT, OBS_ACCESS_KEY_ID and OBS_SECRET_ACCESS_KEY together as one unit in deployment configs
- Add an env preflight check in your container entrypoint
- Document required OBS vars wherever the obs:// store URL is configured
When it happens
Trigger: Using an obs:// remote store without OBS_ENDPOINT exported in the environment of the RisingWave process.
Common situations: Deploying to Huawei Cloud OBS but forgetting to inject the endpoint env var into the container/pod, or misspelling the variable name.
Understand the failure class
Background: "environment variable is not set" and "Missing keys in environment" errors: what missing required env var messages mean and how to fix them — this error's family across 28 libraries.
Related errors
- OBS_ACCESS_KEY_ID not found from environment variables
- OBS_SECRET_ACCESS_KEY not found from environment variables
- AZBLOB_ENDPOINT not found from environment variables
- IcebergSinkWriter should be initialized before barrier
- BatchPosixFsReader should not hit this branch. refer to `bat
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/7d87dd20733e90e6.
Report an issue: GitHub.