{"record":{"id":"777e0c1f4d163c75","repo":"risingwavelabs/risingwave","slug":"failed-to-send-the-rebuild-sink-request-to-the-rea","errorCode":null,"errorMessage":"failed to send the rebuild-sink request to the reader","messagePattern":"failed to send the rebuild-sink request to the reader","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/stream/src/executor/sink.rs","lineNumber":532,"sourceCode":"                                is_checkpoint: barrier.kind.is_checkpoint(),\n                                new_vnode_bitmap: update_vnode_bitmap.clone(),\n                                is_stop: barrier.is_stop(actor_id),\n                                schema_change,\n                                wait_log_store_flush,\n                            },\n                        )\n                        .await?;\n\n                    let mutation = barrier.mutation.clone();\n                    yield Message::Barrier(barrier);\n                    if F::REBUILD_SINK_ON_UPDATE_VNODE_BITMAP\n                        && let Some(new_vnode_bitmap) = update_vnode_bitmap.clone()\n                    {\n                        let (tx, rx) = oneshot::channel();\n                        rebuild_sink_tx\n                            .send(RebuildSinkMessage::RebuildSink(new_vnode_bitmap, tx))\n                            .map_err(|_| {\n                                anyhow!(\"failed to send the rebuild-sink request to the reader\")\n                            })?;\n                        rx.await\n                            .map_err(|_| anyhow!(\"failed to wait for sink rebuild to finish\"))?;\n                    }\n                    post_flush.post_yield_barrier().await?;\n\n                    if let Some(mutation) = mutation.as_deref() {\n                        match mutation {\n                            Mutation::Pause => {\n                                log_writer.pause()?;\n                                is_paused = true;\n                            }\n                            Mutation::Resume => {\n                                log_writer.resume()?;\n                                is_paused = false;\n                            }\n                            Mutation::Throttle(fragment_to_apply) => {\n                                if let Some(entry) = fragment_to_apply.get(&fragment_id)","sourceCodeStart":514,"sourceCodeEnd":550,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/stream/src/executor/sink.rs#L514-L550","documentation":"During a barrier with a vnode bitmap update, the sink executor sends a RebuildSink request over a oneshot-backed channel to the sink reader task, which owns sink rebuilding. If the reader task has already terminated (channel closed), send fails and the executor converts it into this error, meaning the executor can no longer coordinate state restoration with the reader.","triggerScenarios":"rebuild_sink_tx.send(RebuildSinkMessage::RebuildSink(...)) returns Err because the receiving half held by the sink reader/consumer task was dropped — i.e. the reader exited or panicked before the barrier arrived.","commonSituations":"Sink reader task panicked or was cancelled during recovery, actor being migrated/killed mid-barrier, or a bug in sink lifecycle management causing premature drop of the reader.","solutions":["Check sink reader task logs (look for panics or early exits in the sink consumer) preceding this error","Restart the actor/recovery — this usually resolves after the affected actor is rebuilt","If reproducible, inspect lifecycle of rebuild_sink_rx in execute_consume_log to see why the reader dropped early","Report to RisingWave with actor/sink id if it recurs; it indicates a sink executor lifecycle bug"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match rebuild_sink_tx.send(RebuildSinkMessage::RebuildSink(bitmap, tx)) {\n    Ok(()) => {}\n    Err(_) => return Err(anyhow!(\"failed to send the rebuild-sink request to the reader\")),\n}","preventionTips":["Monitor sink reader task health/panics in actor logs","Ensure reader lifetime spans the whole barrier-processing window","Alert on actor recoveries involving sinks to catch lifecycle bugs early"],"tags":["stream-executor","sink","channel"],"backgroundTag":"broken-pipe","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"}