{"record":{"id":"a651919c75e64a32","repo":"risingwavelabs/risingwave","slug":"failed-to-decode-prost-field-not-found-a65191","errorCode":null,"errorMessage":"Failed to decode prost: field not found `{}`","messagePattern":"Failed to decode prost: field not found `(.+?)`","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/stream/src/error.rs","lineNumber":92,"sourceCode":"\n    #[error(\"Secret error: {0}\")]\n    Secret(\n        #[from]\n        #[backtrace]\n        SecretError,\n    ),\n\n    #[error(transparent)]\n    Uncategorized(\n        #[from]\n        #[backtrace]\n        anyhow::Error,\n    ),\n}\n\nimpl From<PbFieldNotFound> for StreamError {\n    fn from(err: PbFieldNotFound) -> Self {\n        Self::from(anyhow::anyhow!(\n            \"Failed to decode prost: field not found `{}`\",\n            err.0\n        ))\n    }\n}\n\nimpl From<ConnectorError> for StreamError {\n    fn from(err: ConnectorError) -> Self {\n        StreamExecutorError::from(err).into()\n    }\n}\n\nimpl From<ExchangeChannelClosed> for StreamError {\n    fn from(err: ExchangeChannelClosed) -> Self {\n        StreamExecutorError::from(err).into()\n    }\n}\n","sourceCodeStart":74,"sourceCodeEnd":110,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/error.rs#L74-L110","documentation":"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.","triggerScenarios":"`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.","commonSituations":"Rolling upgrade with mismatched binary versions across meta/compute nodes; mixed-version cluster after partial deployment; consuming protobuf produced by a newer RisingWave build.","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"],"exampleFix":"// before: mixed versions\n// meta: v1.10, compute: v1.9 -> proto field mismatch\n// after: align versions\n// upgrade all nodes to v1.10 and restart the cluster","handlingStrategy":"validation","validationCode":"// before rolling deploy, verify versions match across nodes:\n// risingwave --version on meta, compute, and frontend nodes","typeGuard":null,"tryCatchPattern":"match decode_result {\n    Err(e) if e.to_string().contains(\"Failed to decode prost: field not found\") => {\n        log::error!(\"protobuf version skew detected: {e}\"); // halt upgrade, align node versions\n    }\n    other => other,\n}","preventionTips":["Keep all cluster binaries on the same version","Follow documented rolling-upgrade compatibility windows","Rebuild custom binaries from a single source revision"],"tags":["rust","streaming","protobuf","decode","version-skew"],"backgroundTag":"protobuf-unmarshal-failed","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"}