databendlabs/databend · error

{e}

Error message

{e}

What it means

After determining log history storage_params, init_logging_system calls init_operator to build an OpenDAL operator for the remote log storage. Any operator construction failure (bad endpoint/credentials/unreachable storage) is wrapped with anyhow::anyhow! and surfaced with the underlying message as '{e}'.

Solutions

  1. Read the wrapped '{e}' message for the underlying OpenDAL cause and fix the storage_params values (endpoint, bucket, credentials)
  2. Verify network reachability and credentials from the meta node to the storage backend
  3. Validate storage_params locally with a quick openald/operator test before restarting metasrv

Example fix

// before
[log.history.storage_params]
type = "s3"
endpoint_url = "http://wrong-host:9000"
// after
[log.history.storage_params]
type = "s3"
endpoint_url = "http://minio:9000"
bucket = "databend-meta"
access_key_id = "..."
secret_access_key = "..."
Defensive patterns

Strategy: try-catch

Validate before calling

// pre-check storage reachability before starting metasrv
curl -s --max-time 5 "$S3_ENDPOINT" || echo 'storage endpoint unreachable'

Try / catch

match init_operator(&params) {
    Ok(op) => GlobalLogger::instance().set_operator(op).await,
    Err(e) => { log::error!("init remote log operator failed: {}", e); std::process::exit(1); }
}

Prevention

When it happens

Trigger: init_operator(params) fails while initializing remote log storage during metasrv startup: invalid bucket, wrong credentials, unreachable endpoint, or malformed storage_params.

Common situations: Misconfigured S3 endpoint/keys in log.history.storage_params; network/firewall blocking storage from the meta node; unsupported storage type string.

Understand the failure class

Background: 'Something went wrong' / 'Request failed (500)' / 'HTTP error! status: 404' — what failed HTTP requests actually mean and how to find the real cause — this error's family across 28 libraries.

Related errors


AI-assisted analysis of databendlabs/databend@288d84d76e (2026-09-11). Data as JSON: /api/errors/d27b3e0a7b877a79. Report an issue: GitHub.

Appendix: source

Thrown at src/meta/binaries/meta/entry.rs:450

        ("cluster_name", raft_config.cluster_name.as_str()),
        ("node_id", &raft_config.id.to_string()),
        ("cluster_id", raft_config.cluster_name.as_str()),
    ]
    .into_iter()
    .map(|(k, v)| (k.to_string(), v.to_string()))
    .collect();

    GlobalInstance::init_production();
    GlobalLogger::init(&app_name, log_config, log_labels);

    if log_config.history.on {
        GlobalIORuntime::init(num_cpus::get())?;

        let params = log_config.history.storage_params.as_ref().ok_or_else(|| {
            anyhow::anyhow!("Log history is enabled but storage_params is not set")
        })?;

        let remote_log_op = init_operator(params).map_err(|e| anyhow::anyhow!(e))?;
        GlobalLogger::instance().set_operator(remote_log_op).await;
    }

    Ok(())
}

fn pretty<T>(v: &T) -> Result<String, serde_json::Error>
where T: serde::Serialize {
    serde_json::to_string_pretty(v)
}

View on GitHub (pinned to 288d84d76e)