risingwavelabs/risingwave · error
Failed to decode prost: field not found `{}`
Error message
Failed to decode prost: field not found `{}` What it means
When a prost-decoded protobuf message contains an unknown or missing required field (PbFieldNotFound), it is converted into a StreamError with the message `Failed to decode prost: field not found `{field}``. This usually indicates protobuf schema drift between components — one side was built with newer generated code than the other.
Source
Thrown at src/stream/src/error.rs:92
#[error("Secret error: {0}")]
Secret(
#[from]
#[backtrace]
SecretError,
),
#[error(transparent)]
Uncategorized(
#[from]
#[backtrace]
anyhow::Error,
),
}
impl From<PbFieldNotFound> for StreamError {
fn from(err: PbFieldNotFound) -> Self {
Self::from(anyhow::anyhow!(
"Failed to decode prost: field not found `{}`",
err.0
))
}
}
impl From<ConnectorError> for StreamError {
fn from(err: ConnectorError) -> Self {
StreamExecutorError::from(err).into()
}
}
impl From<ExchangeChannelClosed> for StreamError {
fn from(err: ExchangeChannelClosed) -> Self {
StreamExecutorError::from(err).into()
}
}
View on GitHub (pinned to 6469eb736d)
Solutions
- Ensure all nodes (meta, compute, frontend) run the same RisingWave version
- Complete any interrupted rolling upgrade and restart stale nodes
- Regenerate/rebuild with matching prost definitions if running a custom build
- If it appears at upgrade time, check release notes for proto field changes requiring migration
Example fix
// before: mixed versions // meta: v1.10, compute: v1.9 -> proto field mismatch // after: align versions // upgrade all nodes to v1.10 and restart the cluster
Defensive patterns
Strategy: validation
Validate before calling
// before rolling deploy, verify versions match across nodes: // risingwave --version on meta, compute, and frontend nodes
Try / catch
match decode_result {
Err(e) if e.to_string().contains("Failed to decode prost: field not found") => {
log::error!("protobuf version skew detected: {e}"); // halt upgrade, align node versions
}
other => other,
} Prevention
- Keep all cluster binaries on the same version
- Follow documented rolling-upgrade compatibility windows
- Rebuild custom binaries from a single source revision
When it happens
Trigger: `From<PbFieldNotFound> for StreamError` fires while deserializing any protobuf control/data message in the stream path (barriers, actor messages, dispatcher messages) that references a field absent from the local .prost definitions.
Common situations: Rolling upgrade with mismatched binary versions across meta/compute nodes; mixed-version cluster after partial deployment; consuming protobuf produced by a newer RisingWave build.
Understand the failure class
Background: "cannot parse invalid wire-format data", "cannot unmarshal", "failed unmarshalling": protobuf unmarshal errors explained — this error's family across 10 libraries.
- Parsing and encoding errors: unexpected token, malformed input — why parsers reject input and how to find the real culprit.
Related errors
- Pb decode error: {0}
- unspecified AsOf join inequality type
- unknown MATCH_RECOGNIZE input mode: {}
- query_epoch not set in distributed lookup join
- Failed to decode prost: field not found `{}`
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/a651919c75e64a32.
Report an issue: GitHub.