risingwavelabs/risingwave · error
cannot create streaming job with snapshot backfill when paus
Error message
cannot create streaming job with snapshot backfill when paused
What it means
The barrier controller refuses to start a streaming job that requires a snapshot backfill while the cluster is paused, because snapshot backfill depends on barrier progress. The job start is failed via the notifier and barrier processing continues.
Source
Thrown at src/meta/src/barrier/checkpoint/control.rs:1316
// skip the command when there is nothing to do with the barrier
if let Some(notifier) = notifier_start {
notifier.started();
}
return Ok(());
};
if let Some(Command::CreateStreamingJob {
job_type:
CreateStreamingJobType::SnapshotBackfill { .. }
| CreateStreamingJobType::BatchRefresh(_),
..
}) = &command
&& self.state.is_paused()
{
warn!("cannot create streaming job with snapshot backfill when paused");
if let Some(notifier) = notifier_start {
notifier.notify_start_failed(
anyhow!("cannot create streaming job with snapshot backfill when paused",)
.into(),
);
}
return Ok(());
}
let barrier_info = self.state.next_barrier_info(checkpoint, curr_epoch);
// Tracing related stuff
barrier_info.prev_epoch.span().in_scope(|| {
tracing::info!(target: "rw_tracing", epoch = barrier_info.curr_epoch(), "new barrier enqueued");
});
span.record("epoch", barrier_info.curr_epoch());
let epoch = barrier_info.epoch();
let ApplyCommandInfo { jobs_to_wait } = match self.apply_command(
command,
&mut notifier_start,
barrier_info,View on GitHub (pinned to 6469eb736d)
Solutions
- Resume the cluster (e.g. ALTER SYSTEM RESUME) and retry the CREATE.
- Delay the DDL until after the pause window completes.
- If the job does not need snapshot backfill, create it without snapshot backfill.
Example fix
-- before CREATE MATERIALIZED VIEW mv AS SELECT * FROM t; -- fails while paused -- after ALTER SYSTEM RESUME; CREATE MATERIALIZED VIEW mv AS SELECT * FROM t;
Defensive patterns
Strategy: validation
Validate before calling
-- ensure cluster is not paused before snapshot-backfill DDL SELECT value FROM system_parameter WHERE name = 'barrier_interval_ms'; -- plus SHOW PROCESSLIST; -- check for paused state / use rw_catalog pause status before CREATE
Prevention
- Resume the cluster before running snapshot-backfill DDL.
- Gate automation so CREATE jobs are not issued during maintenance pauses.
- Monitor cluster pause state in deployment pipelines before DDL steps.
When it happens
Trigger: Submitting CREATE MATERIALIZED VIEW / streaming job with snapshot backfill while the cluster is in a paused state (e.g. paused for ALTER, migration, or manual pause command), detected in handle_new_barrier.
Common situations: Cluster paused for planned maintenance or upgrade while DDL was queued; automation issuing CREATE statements during a paused window.
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
- database of cross db upstream table {} not found
- cannot reschedule jobs {:?} when creating jobs with unresche
- missing lagging barriers for direct log-store start from sna
- batch refresh job {} has no snapshot backfill info
- should not pause when having snapshot backfill job {job_id}
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/d549b6bf88ba9c54.
Report an issue: GitHub.