risingwavelabs/risingwave · error
streaming job {job_id} not found
Error message
streaming job {job_id} not found What it means
After resolving the ensemble's single job_id, render_actors_with_allocator fetches the StreamingJob model from job_map. If the job_id resolved from the entry fragments is not present in the loaded job map, this error is returned with the job ID.
Source
Thrown at src/meta/src/controller/scale.rs:978
)
.map_err(|_| {
anyhow!(
"entry fragments {:?} have inconsistent parallelism settings",
entries.iter().copied().collect_vec()
)
})?;
let (job_id, distribution_type, vnode_count) = Itertools::exactly_one(
entry_fragments
.iter()
.map(|f| (f.job_id, f.distribution_type, f.vnode_count))
.dedup(),
)
.map_err(|_| anyhow!("Multiple jobs found in no-shuffle ensemble"))?;
let job = job_map
.get(&job_id)
.ok_or_else(|| anyhow!("streaming job {job_id} not found"))?;
let database_resource_group = streaming_job_databases
.get(&job_id)
.and_then(|database_id| database_map.get(database_id))
.unwrap()
.resource_group
.clone();
let source_entry_fragment = entry_fragments.iter().find(|f| {
let mask = f.fragment_type_mask;
if mask.contains(FragmentTypeFlag::Source) {
assert!(!mask.contains(FragmentTypeFlag::SourceScan))
}
mask.contains(FragmentTypeFlag::Source) && !mask.contains(FragmentTypeFlag::Dml)
});
let actor_template = EnsembleActorTemplate::render_new(
job,View on GitHub (pinned to 6469eb736d)
Solutions
- Verify the reported job_id exists in the streaming job catalog; if dropped, remove the orphaned fragments or abort the rescale.
- Retry after the concurrent DDL completes.
- Ensure load_fragment_context fetches jobs for every fragment's job_id (not just a subset).
- Restore from meta backup if the job should exist.
Defensive patterns
Strategy: validation
Validate before calling
for fid in ensemble.component_ids() {
let job_id = fragments[&fid].job_id;
assert!(ctx.job_map.contains_key(&job_id), "job {job_id} of fragment {fid} not loaded");
} Type guard
fn job_in_context(ctx: &LoadedFragmentContext, job_id: JobId) -> bool { ctx.job_map.contains_key(&job_id) } Try / catch
let Some(job) = ctx.job_map.get(&job_id) else {
warn!("job {job_id} disappeared mid-rescale; aborting render");
return Err(anyhow!("streaming job {job_id} not found"));
}; Prevention
- Block rescale while jobs are being dropped
- Cascade-delete fragments with jobs
- Re-load the context if any job removal is detected
- Audit post-migration catalogs for orphaned fragments
When it happens
Trigger: An ensemble whose fragments carry a job_id that the load stage did not fetch into job_map — e.g. fragments orphaned from a dropped job inside an ensemble, or a load/dedup bug excluding the job from the StreamingJob query.
Common situations: Rescale while a job is being dropped (fragments still present); migration leaving stale fragment rows; job IDs in fragments not matching any streaming_jobs entry.
Understand the failure class
Background: "Not found" and "does not exist" errors: why "Task not found", "No such folder", and "Can't find" fire when a lookup comes back empty — this error's family across 14 libraries.
Related errors
- streaming jobs {:?} not found
- streaming job {job_id} not found in streaming_job_databases
- fragments {:?} not found
- entry fragments {:?} have inconsistent parallelism settings
- Multiple jobs found in no-shuffle ensemble
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/3be070dd15af8fdb.
Report an issue: GitHub.