{"record":{"id":"c3530f5f36638d38","repo":"risingwavelabs/risingwave","slug":"uncategorized-anyhow-error","errorCode":null,"errorMessage":"Uncategorized (anyhow::Error)","messagePattern":"Uncategorized \\(anyhow::Error\\)","errorType":"error_code","errorClass":"StreamExecutorError","httpStatus":null,"severity":"error","filePath":"src/stream/src/executor/error.rs","lineNumber":115,"sourceCode":"\n    #[error(\"Connector error: {0}\")]\n    ConnectorError(\n        #[source]\n        #[backtrace]\n        BoxedError,\n    ),\n\n    #[error(transparent)]\n    DmlError(\n        #[from]\n        #[backtrace]\n        DmlError,\n    ),\n\n    #[error(transparent)]\n    NotImplemented(#[from] NotImplemented),\n\n    #[error(transparent)]\n    Uncategorized(\n        #[from]\n        #[backtrace]\n        anyhow::Error,\n    ),\n}\n\n/// Serialize/deserialize error.\nimpl From<memcomparable::Error> for StreamExecutorError {\n    fn from(m: memcomparable::Error) -> Self {\n        Self::serde_error(m)\n    }\n}\nimpl From<ValueEncodingError> for StreamExecutorError {\n    fn from(e: ValueEncodingError) -> Self {\n        Self::serde_error(e)\n    }\n}","sourceCodeStart":97,"sourceCodeEnd":133,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/executor/error.rs#L97-L133","documentation":"The Uncategorized variant transparently wraps an anyhow::Error and is the catch-all for StreamExecutorError. Any error without a dedicated variant (including those created by anyhow! macros or bail!) lands here. The message shown, 'Uncategorized (anyhow::Error)', is the Debug/type name — the actual text comes from the wrapped anyhow error.","triggerScenarios":"Created wherever anyhow::Error is converted into StreamExecutorError via From, including From<String> (src/stream/src/executor/error.rs:151) and bail!/anyhow! calls inside executor code, plus From<PbFieldNotFound> (src/stream/src/executor/error.rs:142).","commonSituations":"Ad-hoc error messages from executor internals; prost decode failures; miscellaneous invariant checks; errors surfaced by macros like `bail!`.","solutions":["Read the wrapped anyhow message and backtrace for the real cause.","Match the message to the specific executor/code path that raised it.","Fix the underlying condition described by the inner message.","If caused by a From<PbFieldNotFound>, check for proto schema/version mismatch between nodes."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_uncategorized(e: &StreamExecutorError) -> bool {\n    e.variant_name() == \"Uncategorized\"\n}","tryCatchPattern":"let res: StreamExecutorResult<_> = run().await;\nif let Err(e) = res {\n    // Uncategorized wraps anyhow::Error; log with backtrace for diagnosis\n    tracing::error!(error = ?e, backtrace = ?std::backtrace::Backtrace::capture(), \"executor failed\");\n    return Err(e);\n}","preventionTips":["Prefer typed errors over bail!/String-based errors in executor code.","Always log the full anyhow chain and backtrace for Uncategorized errors.","Keep proto definitions identical across nodes.","Search the inner message for known internal issues before filing bugs."],"tags":["anyhow","catch-all","stream-executor"],"backgroundTag":"internal-invariant-violation","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-23T08:17:48.524Z"}