{"record":{"id":"04ed96be6ad3633c","repo":"risingwavelabs/risingwave","slug":"entry-fragments-have-inconsistent-parallelism","errorCode":null,"errorMessage":"entry fragments {:?} have inconsistent parallelism settings","messagePattern":"entry fragments (.+?) have inconsistent parallelism settings","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/src/controller/scale.rs","lineNumber":962,"sourceCode":"        entries,\n        components,\n    } in ensembles\n    {\n        tracing::debug!(\"rendering ensemble entries {:?}\", entries);\n\n        let entry_fragments = entries\n            .iter()\n            .map(|fragment_id| fragment_lookup.get(fragment_id).unwrap())\n            .collect_vec();\n\n        let entry_fragment_parallelism = Itertools::exactly_one(\n            entry_fragments\n                .iter()\n                .map(|fragment| fragment.parallelism.clone())\n                .dedup(),\n        )\n        .map_err(|_| {\n            anyhow!(\n                \"entry fragments {:?} have inconsistent parallelism settings\",\n                entries.iter().copied().collect_vec()\n            )\n        })?;\n\n        let (job_id, distribution_type, vnode_count) = Itertools::exactly_one(\n            entry_fragments\n                .iter()\n                .map(|f| (f.job_id, f.distribution_type, f.vnode_count))\n                .dedup(),\n        )\n        .map_err(|_| anyhow!(\"Multiple jobs found in no-shuffle ensemble\"))?;\n\n        let job = job_map\n            .get(&job_id)\n            .ok_or_else(|| anyhow!(\"streaming job {job_id} not found\"))?;\n\n        let database_resource_group = streaming_job_databases","sourceCodeStart":944,"sourceCodeEnd":980,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/controller/scale.rs#L944-L980","documentation":"render_actors_with_allocator renders actors for one no-shuffle ensemble at a time. All entry fragments in an ensemble must share the same parallelism; Itertools::exactly_one over their parallelism values fails otherwise, producing this error with the offending entry fragment IDs.","triggerScenarios":"An ensemble mixes entry fragments with different parallelism settings — e.g. fragments produced/modified by different job versions or a rescale that changed parallelism for some fragments of the ensemble but not others.","commonSituations":"Partial rescale/alter operations interrupted midway; legacy jobs upgraded across versions where parallelism persisted per-fragment inconsistently; hand-edited catalog rows.","solutions":["Align parallelism of the listed entry fragments in the catalog so the ensemble is consistent.","Re-run the rescale/replace from a fresh loaded context so all fragments of the ensemble get the same target parallelism.","Check for interrupted ALTER ... SET PARALLELISM operations and complete or roll them back.","File a bug with fragment IDs from the message if the state cannot be explained by in-flight DDL."],"exampleFix":null,"handlingStrategy":"validation","validationCode":"let pars: HashSet<_> = entry_fragments.iter().map(|f| f.parallelism.clone()).collect();\nif pars.len() != 1 {\n    bail!(\"entry fragments {:?} differ in parallelism: {:?}\", entries, pars);\n}","typeGuard":null,"tryCatchPattern":"match render_actors_with_allocator(&ctx, ...) {\n    Err(e) if e.to_string().contains(\"inconsistent parallelism\") => {\n        // reload context and retry once after DDL settles\n        reload_and_retry().await\n    }\n    r => r,\n}","preventionTips":["Apply ALTER ... SET PARALLELISM atomically to all fragments","Avoid resuming a rescale from partial state; restart from a fresh load","Track and complete interrupted parallelism-change jobs","Verify per-fragment parallelism consistency after version upgrades"],"tags":["rescale","parallelism","fragment","allocator"],"backgroundTag":"invalid-argument-value","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T21:17:11.552Z"}