{"record":{"id":"c0cff462102d7995","repo":"risingwavelabs/risingwave","slug":"actor-actor-id-exited-unexpectedly-source","errorCode":null,"errorMessage":"Actor {actor_id} exited unexpectedly: {source}","messagePattern":"Actor (.+?) exited unexpectedly: (.+?)","errorType":"error_code","errorClass":"StreamError","httpStatus":null,"severity":"error","filePath":"src/stream/src/error.rs","lineNumber":61,"sourceCode":"        #[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,\n    },\n\n    #[error(\"Secret error: {0}\")]\n    Secret(\n        #[from]\n        #[backtrace]\n        SecretError,","sourceCodeStart":43,"sourceCodeEnd":79,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/error.rs#L43-L79","documentation":"Raised when a streaming actor terminates with an error instead of completing normally: the actor's exit is reported as `Actor {actor_id} exited unexpectedly: {source}`. It wraps the actor ID plus the underlying StreamError, so operators can tell which fragment/actor failed and why.","triggerScenarios":"The stream manager observes an actor's JoinHandle resolving to an error (actor panic captured as error, executor returned Err), and reports it via this ErrorKind variant.","commonSituations":"A bug in an executor causes it to return an error; OOM or panic inside an actor; upstream infra failure cascading into actor shutdown; materialized view background job dies.","solutions":["Read `source` and the actor_id to identify the failing fragment and root error","Check compute node logs around that actor for panics or OOM","Fix the root cause (query logic, resource limits, infra)","Recover the streaming job; RisingWave will attempt to rebuild the failed actor"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"match actor_handle.await {\n    Ok(Ok(())) => {}\n    Ok(Err(e)) | Err(e) => log::error!(\"actor {} exited unexpectedly: {}\", actor_id, e),\n}","preventionTips":["Monitor actor liveness and restart policies","Set memory limits to avoid OOM kills of actors","Capture panics in executor loops so they surface as typed errors"],"tags":["rust","streaming","actor","lifecycle"],"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-23T08:17:48.524Z"}