{"record":{"id":"04cfc48f7495808c","repo":"risingwavelabs/risingwave","slug":"entry-fragments-have-inconsistent-parallelism-sett","errorCode":null,"errorMessage":"entry fragments have inconsistent parallelism settings in batch refresh job","messagePattern":"entry fragments have inconsistent parallelism settings in batch refresh job","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"src/meta/src/barrier/checkpoint/independent_job/batch_refresh_job/mod.rs","lineNumber":258,"sourceCode":"\n            // Assert all component fragments share the same vnode count.\n            for fid in ensemble.component_fragments() {\n                let f = &fragments[&fid];\n                assert_eq!(\n                    vnode_count, f.vnode_count,\n                    \"fragments {} and {} in same ensemble have different vnode counts\",\n                    first_component, fid,\n                );\n            }\n\n            let entry_fragment_parallelism = Itertools::exactly_one(\n                ensemble\n                    .entry_fragments()\n                    .map(|fid| fragments[&fid].parallelism.clone())\n                    .dedup(),\n            )\n            .map_err(|_| {\n                anyhow!(\n                    \"entry fragments have inconsistent parallelism settings in batch refresh job\"\n                )\n            })?;\n\n            let actor_template = EnsembleActorTemplate::render_new(\n                streaming_job_model,\n                worker_nodes,\n                entry_fragment_parallelism,\n                database_resource_group.to_owned(),\n                distribution_type,\n                vnode_count,\n            )?;\n\n            for fid in ensemble.component_fragments() {\n                let f = &fragments[&fid];\n                let aligner =\n                    ComponentFragmentAligner::new_persistent(&actor_template, actor_id_generator);\n                let assignments = aligner.align_component_actor(f.distribution_type);","sourceCodeStart":240,"sourceCodeEnd":276,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/barrier/checkpoint/independent_job/batch_refresh_job/mod.rs#L240-L276","documentation":"When rendering actors for a batch refresh (time travel) job, all entry fragments must share one parallelism setting; deduplicating their parallelism yields more than one distinct value and the ensemble rendering fails. This is an internal consistency requirement for building the job's actor graph.","triggerScenarios":"A batch refresh job whose entry fragments were planned with differing parallelism (e.g. plan/parallelism adjustment between fragment creations) reaches render_actors_and_build_job_info.","commonSituations":"Plan-level bug where entry fragments get inconsistent parallelism; cluster parallelism changed between planning and rendering; post-upgrade metadata inconsistency in an in-flight refresh job.","solutions":["Retry the refresh operation; a fresh plan may render consistent parallelism.","Check for concurrent ALTER (parallelism changes) on the table being refreshed and avoid them during refresh.","If reproducible, file a bug with the plan/fragment parallelism details — it indicates a frontend planning inconsistency."],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":"match refresh_result {\n    Err(e) if e.to_string().contains(\"inconsistent parallelism settings\") => {\n        // wait, avoid concurrent ALTER, retry the refresh once\n    }\n    other => other?,\n}","preventionTips":["Avoid concurrent ALTER/parallelism changes while a refresh job is in flight.","Retry refreshes that fail with this message; a fresh plan usually renders consistently.","Escalate reproducible cases as frontend planning bugs."],"tags":["barrier","batch-refresh","parallelism","internal-invariant"],"backgroundTag":"internal-invariant-violation","analyzedSha":"6469eb736d691e8e9b8a419a57edd6429ca77417","analyzedAt":"2026-09-11T21:06:21.487Z","contentChangedAt":"2026-09-11T21:06:21.487Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}