risingwavelabs/risingwave · error · MetaError

reschedule intent must be resolved before apply

Error message

reschedule intent must be resolved before apply

What it means

`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.

Source

Thrown at src/meta/src/barrier/checkpoint/state.rs:457

    ) -> MetaResult<ApplyCommandInfo> {
        debug_assert!(
            !matches!(
                command,
                Some(Command::RescheduleIntent {
                    reschedule_plan: None,
                    ..
                })
            ),
            "reschedule intent must be resolved before apply"
        );
        if matches!(
            command,
            Some(Command::RescheduleIntent {
                reschedule_plan: None,
                ..
            })
        ) {
            bail!("reschedule intent must be resolved before apply");
        }

        /// Resolve source splits for a create streaming job command.
        ///
        /// Combines source fragment split resolution and backfill split alignment
        /// into one step, looking up existing upstream actor splits from the inflight database info.
        fn resolve_source_splits(
            info: &CreateStreamingJobCommandInfo,
            render_result: &RenderResult,
            actor_no_shuffle: &ActorNewNoShuffle,
            database_info: &InflightDatabaseInfo,
        ) -> MetaResult<SplitAssignment> {
            let fragment_actor_ids: HashMap<FragmentId, Vec<ActorId>> = render_result
                .stream_actors
                .iter()
                .map(|(fragment_id, actors)| {
                    (
                        *fragment_id,

View on GitHub (pinned to 6469eb736d)

Solutions

  1. Retry the reschedule command; the intent should be re-created with a resolved plan.
  2. Inspect how the RescheduleIntent command was produced (which API/plan) and re-issue a full RESCHEDULE with a concrete plan.
  3. If reproducible, file a bug with the barrier/command logs — this indicates an internal invariant violation.
Defensive patterns

Strategy: try-catch

Type guard

fn is_resolved_reschedule(cmd: &Command) -> bool {
    !matches!(cmd, Command::RescheduleIntent { reschedule_plan: None, .. })
}

Try / catch

match barrier_result {
    Err(e) if e.to_string().contains("reschedule intent must be resolved") => {
        // internal invariant hit: re-issue RESCHEDULE with a concrete plan; capture logs and report
    }
    other => other?,
}

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Understand the failure class

Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.

Related errors


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