{"record":{"id":"bf0f7ffb41771da7","repo":"risingwavelabs/risingwave","slug":"service-unavailable-0","errorCode":null,"errorMessage":"Service unavailable: {0}","messagePattern":"Service unavailable: (.+?)","errorType":"error_code","errorClass":"MetaError","httpStatus":null,"severity":"error","filePath":"src/meta/src/error.rs","lineNumber":91,"sourceCode":"    InvalidParameter(#[message] String),\n\n    // Used for catalog errors.\n    #[error(\"{0} id not found: {1}\")]\n    #[construct(skip)]\n    CatalogIdNotFound(&'static str, String),\n\n    #[error(\"table_fragment does not exist: id={0}\")]\n    FragmentNotFound(FragmentId),\n\n    #[error(\"{0} named {1} already exists{under_creation}\", under_creation = (.2).map(|_| \" and is still being created\").unwrap_or(\"\"))]\n    Duplicated(\n        &'static str,\n        String,\n        // if under creation, take streaming job id, otherwise None\n        Option<JobId>,\n    ),\n\n    #[error(\"Service unavailable: {0}\")]\n    Unavailable(#[message] String),\n\n    #[error(\"Election failed: {0}\")]\n    Election(#[source] BoxedError),\n\n    #[error(\"Cancelled: {0}\")]\n    Cancelled(String),\n\n    #[error(\"System parameters error: {0}\")]\n    SystemParams(String),\n\n    #[error(\"Session parameters error: {0}\")]\n    SessionConfig(\n        #[from]\n        #[backtrace]\n        SessionConfigError,\n    ),\n","sourceCodeStart":73,"sourceCodeEnd":109,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/error.rs#L73-L109","documentation":"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.","triggerScenarios":"Meta leader election in progress or failed, meta store (e.g. etcd/MemStore) unreachable, meta node overloaded or shutting down while an RPC arrives.","commonSituations":"Rolling restarts/upgrades of the meta node, etcd outage or partition, failover window where no leader is elected yet.","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."],"exampleFix":"// before\nlet result = meta_client.create_table(req).await?; // Unavailable\n// after\nlet result = retry::retry(ExponentialBackoff::default(), ||\n    meta_client.create_table(req.clone())).await?;","handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match meta_result {\n    Err(MetaError::Unavailable(msg)) => { /* retry with exponential backoff */ }\n    other => other?,\n}","preventionTips":["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."],"tags":["meta","availability","transient","rpc"],"backgroundTag":"http-error-response","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}