risingwavelabs/risingwave · error · MetaError

Service unavailable: {0}

Error message

Service unavailable: {0}

What it means

The meta service (or a component it depends on, such as election or key-value storage) is temporarily unable to serve requests. `#[message]` carries the reason. Signals a transient availability problem rather than a client error.

Source

Thrown at src/meta/src/error.rs:91

    InvalidParameter(#[message] String),

    // Used for catalog errors.
    #[error("{0} id not found: {1}")]
    #[construct(skip)]
    CatalogIdNotFound(&'static str, String),

    #[error("table_fragment does not exist: id={0}")]
    FragmentNotFound(FragmentId),

    #[error("{0} named {1} already exists{under_creation}", under_creation = (.2).map(|_| " and is still being created").unwrap_or(""))]
    Duplicated(
        &'static str,
        String,
        // if under creation, take streaming job id, otherwise None
        Option<JobId>,
    ),

    #[error("Service unavailable: {0}")]
    Unavailable(#[message] String),

    #[error("Election failed: {0}")]
    Election(#[source] BoxedError),

    #[error("Cancelled: {0}")]
    Cancelled(String),

    #[error("System parameters error: {0}")]
    SystemParams(String),

    #[error("Session parameters error: {0}")]
    SessionConfig(
        #[from]
        #[backtrace]
        SessionConfigError,
    ),

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Retry the request with backoff — this is usually transient.
  2. Check meta node logs for election or storage errors.
  3. Verify the meta store (etcd) is healthy and reachable.
  4. If the meta node is down, restart it or fail over to a standby.

Example fix

// before
let result = meta_client.create_table(req).await?; // Unavailable
// after
let result = retry::retry(ExponentialBackoff::default(), ||
    meta_client.create_table(req.clone())).await?;
Defensive patterns

Strategy: retry

Try / catch

match meta_result {
    Err(MetaError::Unavailable(msg)) => { /* retry with exponential backoff */ }
    other => other?,
}

Prevention

When it happens

Trigger: Meta leader election in progress or failed, meta store (e.g. etcd/MemStore) unreachable, meta node overloaded or shutting down while an RPC arrives.

Common situations: Rolling restarts/upgrades of the meta node, etcd outage or partition, failover window where no leader is elected yet.

Understand the failure class

Background: "API error: {status}" and "HTTP 401/403/404/429/5xx" errors: non-2xx HTTP responses explained — this error's family across 27 libraries.

Related errors


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