risingwavelabs/risingwave · warning
Cannot alter the job {} because its creating backfill contai
Error message
Cannot alter the job {} because its creating backfill contains a scan type that does not support online rescheduling What it means
During online rescheduling of a creating backfill job's parallelism, the meta node checks collect_online_unreschedulable_backfill_jobs for scan-type backfills that do not support online rescheduling (e.g. certain scan-based backfill strategies). If the job appears there, the parallelism change is rejected.
Source
Thrown at src/meta/src/stream/stream_manager.rs:978
pub(crate) async fn reschedule_streaming_job_backfill_parallelism(
&self,
job_id: JobId,
parallelism: Option<ParallelismPolicy>,
deferred: bool,
) -> MetaResult<()> {
let _reschedule_job_lock = self.reschedule_lock_write_guard().await;
if !deferred {
let creating_jobs = self.metadata_manager.list_creating_jobs().await?;
if !creating_jobs.is_empty() {
let jobs_with_unreschedulable_scan = self
.metadata_manager
.collect_online_unreschedulable_backfill_jobs(&creating_jobs)
.await?;
if jobs_with_unreschedulable_scan.contains(&job_id) {
bail!(
"Cannot alter the job {} because its creating backfill contains a scan type that does not support online rescheduling",
job_id,
);
}
}
}
let commands = self
.scale_controller
.reschedule_backfill_parallelism_inplace(HashMap::from([(job_id, parallelism)]))
.await?;
if !deferred {
let _source_pause_guard = self.source_manager.pause_tick().await;
for (database_id, command) in commands {
self.barrier_scheduler
.run_command(database_id, command)View on GitHub (pinned to 6469eb736d)
Solutions
- Wait for the backfill to complete, then change parallelism normally.
- Recreate the job with the target parallelism so no online reschedule is needed.
- Use a backfill mode that supports online rescheduling if mid-creation scaling is a requirement.
Example fix
// before: ALTER ... SET PARALLELISM while scan-type backfill is creating -> error // after -- wait until backfill done, then: ALTER MATERIALIZED VIEW mv SET PARALLELISM = 8;
Defensive patterns
Strategy: try-catch
Validate before calling
-- avoid altering parallelism while a scan-type backfill is still creating SELECT state FROM rw_streaming_jobs WHERE job_id = <id> AND state = 'Created';
Try / catch
match alter_parallelism(id, n).await {
Err(e) if e.to_string().contains("does not support online rescheduling") => {
// defer until backfill completes
on_backfill_complete(id, move || alter_parallelism(id, n)).await
}
other => other,
} Prevention
- Queue parallelism changes until backfill jobs finish.
- Prefer recreating scan-backfill jobs at the desired parallelism.
- Track which backfill scan types in your deployment are online-reschedulable.
- Gate autoscalers so they do not reschedule creating backfill jobs.
When it happens
Trigger: Calling reschedule_streaming_job_backfill_parallelism on a CREATING job whose backfill performs a scan type flagged as not online-reschedulable; the job_id is found in jobs_with_unreschedulable_scan.
Common situations: Altering parallelism of a MV/backfill using a scan-based backfill (e.g. table scan backfill without online reschedule support); scheduler/autoscaler adjusting worker counts while such backfills run; version-dependent behavior where older backfill plans lack reschedule metadata.
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
- Cannot alter the job {} because it is blocked by creating un
- ALTER TABLE SET BACKFILL PARALLELISM is not supported for ic
- specified backfill parallelism {n} should not exceed max par
- serverless backfill controller returned error
- Unsupported parallelism: {0}
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/a71b6a9059b622d5.
Report an issue: GitHub.