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

  1. Export AZBLOB_ENDPOINT with the blob service URL (e.g. https://<account>.blob.core.windows.net) before starting RisingWave
  2. Add the variable to your deployment manifest / risedev profile env section
  3. Verify with `env | grep AZBLOB` inside the container/host the process runs in
  4. 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

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


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