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
- Retry the request with backoff — this is usually transient.
- Check meta node logs for election or storage errors.
- Verify the meta store (etcd) is healthy and reachable.
- 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
- Build retry-with-backoff into all meta client calls.
- Monitor meta node and meta store (etcd) health proactively.
- Schedule client work to avoid rolling meta restart windows, or tolerate Unavailable there.
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.
- HTTP status errors: handling 4xx and 5xx responses — how to handle 4xx and 5xx responses properly.
Related errors
- no frontend worker available
- anyhow!(message.to_owned())
- {message}: in worker node {}, {};
- cluster under recovery[{}]
- Invalid worker: {0}, {1}
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/bf0f7ffb41771da7.
Report an issue: GitHub.