{"record":{"id":"743b39d2a06977d7","repo":"risingwavelabs/risingwave","slug":"executor-error-0","errorCode":null,"errorMessage":"Executor error: {0}","messagePattern":"Executor error: (.+?)","errorType":"error_code","errorClass":"StreamError","httpStatus":null,"severity":"error","filePath":"src/stream/src/error.rs","lineNumber":54,"sourceCode":"    thiserror_ext::Construct,\n)]\n#[thiserror_ext(newtype(name = StreamError, backtrace))]\npub enum ErrorKind {\n    #[error(\"Storage error: {0}\")]\n    Storage(\n        #[backtrace]\n        #[from]\n        StorageError,\n    ),\n\n    #[error(\"Expression error: {0}\")]\n    Expression(\n        #[from]\n        #[backtrace]\n        ExprError,\n    ),\n\n    #[error(\"Executor error: {0}\")]\n    Executor(\n        #[from]\n        #[backtrace]\n        StreamExecutorError,\n    ),\n\n    #[error(\"Actor {actor_id} exited unexpectedly: {source}\")]\n    UnexpectedExit {\n        actor_id: ActorId,\n        #[backtrace]\n        source: StreamError,\n    },\n\n    #[error(\"Failed to send barrier with epoch {epoch} to actor {actor_id}: {reason}\", epoch = .barrier.epoch.curr)]\n    BarrierSend {\n        barrier: Barrier,\n        actor_id: ActorId,\n        reason: &'static str,","sourceCodeStart":36,"sourceCodeEnd":72,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/error.rs#L36-L72","documentation":"This is the Executor variant of the stream engine ErrorKind: a StreamExecutorError from any streaming actor/executor is wrapped as `Executor error: {0}`. It is the standard funnel through which executor failures (channel issues, barrier handling, data errors) surface to the actor's error handler.","triggerScenarios":"Any executor returns Err(StreamExecutorError) — e.g. barrier collection failure, channel send failure, inconsistent epoch, or an inner expression/storage error — converted via `#[from]`.","commonSituations":"Downstream channel closed while upstream still sends; barrier mismatched or lost; data-driven assertion failures inside operators; nested Expression/Storage errors re-wrapped.","solutions":["Inspect the inner StreamExecutorError source for the real cause","Check stream actor logs and the compute node for the failing executor","Look for channel/barrier failures around the reported actor/epoch","If caused by query logic, fix the query; if infra, restart the streaming job"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"if let Err(e) = actor_join_result {\n    if let Some(inner) = e.root_cause_downcast_ref::<StreamExecutorError>() {\n        log::error!(\"executor root cause: {inner}\");\n    }\n}","preventionTips":["Always inspect the inner error source, not the wrapper","Watch actor/fragment health metrics to catch failures early","Keep barrier and channel paths covered by tests"],"tags":["rust","streaming","executor"],"backgroundTag":"invalid-state-transition","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"}