risingwavelabs/risingwave · error · StreamError
Actor exited unexpectedly
Error message
Actor {actor_id} exited unexpectedly: {source} What it means
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.
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
Defensive patterns
Strategy: try-catch
Try / catch
match actor_handle.await {
Ok(Ok(())) => {}
Ok(Err(e)) | Err(e) => log::error!("actor {} exited unexpectedly: {}", actor_id, e),
} Prevention
- 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
When it happens
Trigger: 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.
Common situations: 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.
Understand the failure class
Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.
Related errors
- Array error
- below watermark check condition eval must return bool array
- cannot find StreamActor of actor
- Chunk operation error
- clean watermark column index
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/c0cff462102d7995.
Report an issue: GitHub.
Appendix: source
Thrown at src/stream/src/error.rs:61
#[from]
StorageError,
),
#[error("Expression error: {0}")]
Expression(
#[from]
#[backtrace]
ExprError,
),
#[error("Executor error: {0}")]
Executor(
#[from]
#[backtrace]
StreamExecutorError,
),
#[error("Actor {actor_id} exited unexpectedly: {source}")]
UnexpectedExit {
actor_id: ActorId,
#[backtrace]
source: StreamError,
},
#[error("Failed to send barrier with epoch {epoch} to actor {actor_id}: {reason}", epoch = .barrier.epoch.curr)]
BarrierSend {
barrier: Barrier,
actor_id: ActorId,
reason: &'static str,
},
#[error("Secret error: {0}")]
Secret(
#[from]
#[backtrace]
SecretError,View on GitHub (pinned to 6469eb736d)