{"record":{"id":"d9b07122df1f360b","repo":"risingwavelabs/risingwave","slug":"reschedule-intent-must-be-resolved-before-apply","errorCode":null,"errorMessage":"reschedule intent must be resolved before apply","messagePattern":"reschedule intent must be resolved before apply","errorType":"validation","errorClass":"MetaError","httpStatus":null,"severity":"error","filePath":"src/meta/src/barrier/checkpoint/state.rs","lineNumber":457,"sourceCode":"    ) -> MetaResult<ApplyCommandInfo> {\n        debug_assert!(\n            !matches!(\n                command,\n                Some(Command::RescheduleIntent {\n                    reschedule_plan: None,\n                    ..\n                })\n            ),\n            \"reschedule intent must be resolved before apply\"\n        );\n        if matches!(\n            command,\n            Some(Command::RescheduleIntent {\n                reschedule_plan: None,\n                ..\n            })\n        ) {\n            bail!(\"reschedule intent must be resolved before apply\");\n        }\n\n        /// Resolve source splits for a create streaming job command.\n        ///\n        /// Combines source fragment split resolution and backfill split alignment\n        /// into one step, looking up existing upstream actor splits from the inflight database info.\n        fn resolve_source_splits(\n            info: &CreateStreamingJobCommandInfo,\n            render_result: &RenderResult,\n            actor_no_shuffle: &ActorNewNoShuffle,\n            database_info: &InflightDatabaseInfo,\n        ) -> MetaResult<SplitAssignment> {\n            let fragment_actor_ids: HashMap<FragmentId, Vec<ActorId>> = render_result\n                .stream_actors\n                .iter()\n                .map(|(fragment_id, actors)| {\n                    (\n                        *fragment_id,","sourceCodeStart":439,"sourceCodeEnd":475,"githubUrl":"https://github.com/risingwavelabs/risingwave/blob/6469eb736d691e8e9b8a419a57edd6429ca77417/src/meta/src/barrier/checkpoint/state.rs#L439-L475","documentation":"`apply_command` must never receive an unresolved `RescheduleIntent` (one whose reschedule_plan is None). The intent is expected to be resolved to a concrete plan earlier in handle_new_barrier; hitting this bail means an internal precondition was violated.","triggerScenarios":"A `Command::RescheduleIntent` with `reschedule_plan: None` reaches apply_command (called from handle_new_barrier) — i.e. the resolution step failed to populate the plan or a code path forwarded the raw intent.","commonSituations":"Internal bug in the reschedule resolution path; race where an intent command is constructed without a plan and queued directly; post-upgrade incompatibility in command serialization.","solutions":["Retry the reschedule command; the intent should be re-created with a resolved plan.","Inspect how the RescheduleIntent command was produced (which API/plan) and re-issue a full RESCHEDULE with a concrete plan.","If reproducible, file a bug with the barrier/command logs — this indicates an internal invariant violation."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":"fn is_resolved_reschedule(cmd: &Command) -> bool {\n    !matches!(cmd, Command::RescheduleIntent { reschedule_plan: None, .. })\n}","tryCatchPattern":"match barrier_result {\n    Err(e) if e.to_string().contains(\"reschedule intent must be resolved\") => {\n        // internal invariant hit: re-issue RESCHEDULE with a concrete plan; capture logs and report\n    }\n    other => other?,\n}","preventionTips":["Always issue RESCHEDULE commands with a fully specified plan.","Upgrade meta/frontend together to avoid command serialization skew.","Keep barrier logs when reproducing; this error signals an internal bug to report."],"tags":["barrier","reschedule","internal-invariant","precondition"],"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"}