risingwavelabs/risingwave · error · StreamExecutorError
Uncategorized (anyhow::Error)
Error message
Uncategorized (anyhow::Error)
What it means
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.
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.
Defensive patterns
Strategy: try-catch
Type guard
fn is_uncategorized(e: &StreamExecutorError) -> bool {
e.variant_name() == "Uncategorized"
} Try / catch
let res: StreamExecutorResult<_> = run().await;
if let Err(e) = res {
// Uncategorized wraps anyhow::Error; log with backtrace for diagnosis
tracing::error!(error = ?e, backtrace = ?std::backtrace::Backtrace::capture(), "executor failed");
return Err(e);
} Prevention
- 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.
When it happens
Trigger: 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).
Common situations: Ad-hoc error messages from executor internals; prost decode failures; miscellaneous invariant checks; errors surfaced by macros like `bail!`.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- anyhow::Error
- builder should have yielded a chunk
- Channel closed
- compaction resolver sink
- compaction resolver sink
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/c3530f5f36638d38.
Report an issue: GitHub.
Appendix: source
Thrown at src/stream/src/executor/error.rs:115
#[error("Connector error: {0}")]
ConnectorError(
#[source]
#[backtrace]
BoxedError,
),
#[error(transparent)]
DmlError(
#[from]
#[backtrace]
DmlError,
),
#[error(transparent)]
NotImplemented(#[from] NotImplemented),
#[error(transparent)]
Uncategorized(
#[from]
#[backtrace]
anyhow::Error,
),
}
/// Serialize/deserialize error.
impl From<memcomparable::Error> for StreamExecutorError {
fn from(m: memcomparable::Error) -> Self {
Self::serde_error(m)
}
}
impl From<ValueEncodingError> for StreamExecutorError {
fn from(e: ValueEncodingError) -> Self {
Self::serde_error(e)
}
}View on GitHub (pinned to 6469eb736d)