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
- 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.
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
- 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.
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
- unexpected job_type {job_type:?} for first job {} in databas
- cannot reschedule jobs {:?} when creating jobs with unresche
- entry fragments have inconsistent parallelism settings in ba
- missing lagging barriers for direct log-store start from sna
- iceberg pk-index writer {} replacement input closed before i
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/d9b07122df1f360b.
Report an issue: GitHub.