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.
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
- BatchPosixFsReader should not hit this branch. refer to…
- below watermark check condition eval must return bool array
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/7d87dd20733e90e6.
Report an issue: GitHub.
Appendix: 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)