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

  1. Resume the cluster (e.g. ALTER SYSTEM RESUME) and retry the CREATE.
  2. Delay the DDL until after the pause window completes.
  3. 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

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


AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11). Data as JSON: /api/errors/d549b6bf88ba9c54. Report an issue: GitHub.