risingwavelabs/risingwave · error · SinkError::Coordinator
no coordinator
Error message
no coordinator
What it means
This error is returned by the default `new_coordinator` implementation of the sink commit coordinator trait, indicating that this sink connector does not provide a commit coordinator. It surfaces when a two-phase (decoupled) commit is requested for a sink whose implementation has no coordinator, typically non-Iceberg connectors.
Source
Thrown at src/connector/src/sink/mod.rs:903
Ok(())
}
fn validate_unknown_fields(&self) -> Result<()> {
Ok(())
}
async fn validate(&self) -> Result<()>;
async fn new_log_sinker(&self, writer_param: SinkWriterParam) -> Result<Self::LogSinker>;
fn is_coordinated_sink(&self) -> bool {
false
}
async fn new_coordinator(
&self,
_iceberg_compact_stat_sender: Option<UnboundedSender<IcebergSinkCompactionUpdate>>,
) -> Result<SinkCommitCoordinator> {
Err(SinkError::Coordinator(anyhow!("no coordinator")))
}
}
pub trait SinkLogReader: Send {
fn start_from(
&mut self,
start_offset: Option<u64>,
) -> impl Future<Output = LogStoreResult<()>> + Send + '_;
/// Emit the next item.
///
/// The implementation should ensure that the future is cancellation safe.
fn next_item(
&mut self,
) -> impl Future<Output = LogStoreResult<(u64, LogStoreReadItem)>> + Send + '_;
/// Mark that all items emitted so far have been consumed and it is safe to truncate the log
/// from the current offset.
fn truncate(&mut self, offset: TruncateOffset) -> LogStoreResult<()>;View on GitHub (pinned to 6469eb736d)
Solutions
- Disable sink decoupling for this sink: `SET sink_decouple = false` and drop `commit_checkpoint_interval` > 1 from WITH options
- Check whether the connector supports a commit coordinator (Iceberg does); switch the sink to a supported connector if two-phase commit is required
- If implementing a new sink connector, override `new_coordinator` to return a real SinkCommitCoordinator
Defensive patterns
Strategy: validation
Validate before calling
// verify the connector supports a commit coordinator before enabling decouple
if !matches!(sink_type, SinkType::Iceberg) && (decouple_enabled || commit_interval > 1) {
return Err("sink decouple requires a coordinator-capable connector (e.g. iceberg)");
} Prevention
- Only enable sink_decouple for connectors documented to support it (e.g. Iceberg)
- Keep commit_checkpoint_interval unset (=1) for integrated-commit sinks
When it happens
Trigger: Creating a sink with sink decouple enabled (or commit_checkpoint_interval > 1) on a connector whose `SinkCommitter::new_coordinator` uses the default trait implementation that unconditionally returns `Err(SinkError::Coordinator(anyhow!("no coordinator")))`.
Common situations: Enabling sink_decouple for a Kafka/Doris/other sink that only supports integrated commit; misconfigured connector type; driver code attempting two-phase commit after a config validation gap.
Related errors
- coordinator error: {0}
- should have meta client
- should get metadata on checkpoint barrier
- newly start epoch {} after update vnode bitmap not matched w
- HTTP sink url option cannot coexist with url column
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/89dbde1dd7f8e317.
Report an issue: GitHub.