risingwavelabs/risingwave · critical
AZBLOB_ENDPOINT not found from environment variables
Error message
AZBLOB_ENDPOINT not found from environment variables
What it means
new_azblob_engine reads the Azure Blob endpoint from the AZBLOB_ENDPOINT environment variable and panics if it is unset, because the OpenDAL azblob builder cannot construct a client without an endpoint. The process aborts with this message at store creation time.
Source
Thrown at src/object_store/src/object/opendal_engine/azblob.rs:39
use super::{MediaType, OpendalObjectStore, new_operator};
use crate::object::ObjectResult;
use crate::object::object_metrics::ObjectStoreMetrics;
const AZBLOB_ENDPOINT: &str = "AZBLOB_ENDPOINT";
impl OpendalObjectStore {
/// create opendal azblob engine.
pub fn new_azblob_engine(
container_name: String,
root: String,
config: Arc<ObjectStoreConfig>,
metrics: Arc<ObjectStoreMetrics>,
) -> ObjectResult<Self> {
// Create azblob backend builder.
let mut builder = Azblob::default().root(&root).container(&container_name);
let endpoint = std::env::var(AZBLOB_ENDPOINT)
.unwrap_or_else(|_| panic!("AZBLOB_ENDPOINT not found from environment variables"));
builder = builder.endpoint(&endpoint);
let op = new_operator(
&config,
Operator::new(builder)?.layer(LoggingLayer::default()),
);
Ok(Self {
op,
media_type: MediaType::Azblob,
config,
metrics,
})
}
}
View on GitHub (pinned to 6469eb736d)
Solutions
- Export AZBLOB_ENDPOINT with the blob service URL (e.g. https://<account>.blob.core.windows.net) before starting RisingWave
- Add the variable to your deployment manifest / risedev profile env section
- Verify with `env | grep AZBLOB` inside the container/host the process runs in
- Also set the related AZBLOB credentials (account name/key) expected by the azblob builder
Example fix
// before: process-wide panic on missing env
let endpoint = std::env::var(AZBLOB_ENDPOINT)
.unwrap_or_else(|_| panic!("AZBLOB_ENDPOINT not found from environment variables"));
// after: fail with a proper ObjectError instead
let endpoint = std::env::var(AZBLOB_ENDPOINT).map_err(|_| {
ObjectError::internal("AZBLOB_ENDPOINT not found from environment variables")
})?; Defensive patterns
Strategy: validation
Validate before calling
// Fail fast with a clear message before starting RisingWave
if std::env::var("AZBLOB_ENDPOINT").is_err() {
eprintln!("AZBLOB_ENDPOINT must be set (e.g. https://<account>.blob.core.windows.net)");
std::process::exit(1);
} Try / catch
// The panic aborts the process; guard it before constructing the store.
// Run store construction in a monitored supervisor so the exit is surfaced clearly.
match std::panic::catch_unwind(|| build_store_blocking()) {
Ok(store) => store,
Err(_) => { eprintln!("azblob engine init failed: check AZBLOB_ENDPOINT/AZBLOB_* env vars"); std::process::exit(1); }
} Prevention
- Export AZBLOB_ENDPOINT (and AZBLOB_ACCOUNT_NAME/AZBLOB_ACCOUNT_KEY) in every environment that runs RisingWave
- Add an env-var preflight check to your deployment entrypoint script
- Use a config management tool to keep env vars consistent across hosts
When it happens
Trigger: Configuring RisingWave with an azblob:// remote object store while AZBLOB_ENDPOINT is not exported in the environment of the risingwave process.
Common situations: Missing env var in systemd/docker/Kubernetes deployments, running risedev without the azblob fixture env, or typos in 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_ENDPOINT not found from environment variables
- OBS_ACCESS_KEY_ID not found from environment variables
- OBS_SECRET_ACCESS_KEY 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/016a1949486df855.
Report an issue: GitHub.