risingwavelabs/risingwave · error
source not found in source manager
Error message
source {} not found in source manager What it means
reset_source_splits looks up the given source_id in the in-memory SourceManager; this error fires when the source is not currently tracked (its entry was absent when the reset branch checked). Split reset only applies to sources the manager actively manages.
Solutions
- Confirm the source_id exists (SELECT from rw_sources / catalog)
- Re-check you are connected to the correct cluster/meta node
- Recreate or refresh the source so the manager registers it, then reset splits
Defensive patterns
Strategy: try-catch
Validate before calling
-- verify the source exists before resetting splits SELECT id FROM rw_catalog.rw_sources WHERE id = <source_id>;
Try / catch
match manager.reset_source_splits(source_id).await {
Err(e) if e.to_string().contains("not found in source manager") => {
tracing::warn!("source {} already gone; skipping reset", source_id);
}
r => r?,
} Prevention
- Refresh source ids from the catalog before reset operations
- Handle DROP SOURCE races in automation that resets splits
When it happens
Trigger: Calling the split-reset path (debug/internal API) for a source_id that is not registered — source already dropped, never created on this meta node, or removed during recovery.
Common situations: Operator/tooling resetting splits for a stale source id after a DROP SOURCE; pointing a test utility at the wrong meta node; source removed between lookup and reset.
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
- upstream assignment not found, fragment_id
- cannot find StreamActor of actor
- concurrent backup job is not supported: existent job
- `debug_splits` is not allowed in release mode
- downstream relation missing for
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/0fff1adff7836a8f.
Report an issue: GitHub.
Appendix: source
Thrown at src/meta/src/stream/source_manager.rs:601
// Force a tick to re-discover splits
tracing::info!(
%source_id,
"Triggering split re-discovery via force_tick"
);
handle.force_tick().await.with_context(|| {
format!(
"failed to force tick for source {} after split reset",
source_id
)
})?;
tracing::info!(
%source_id,
"Split reset completed - new splits will be assigned on next tick"
);
Ok(())
} else {
Err(anyhow::anyhow!("source {} not found in source manager", source_id).into())
}
}
/// Validate split offsets before injecting them.
/// Returns `Ok(applied_split_ids)` if all validations pass, otherwise returns an error.
///
/// Validations performed:
/// 1. Source exists in source manager
/// 2. All requested split IDs exist in the source's current splits (runtime assignment)
pub async fn validate_inject_source_offsets(
&self,
source_id: SourceId,
split_offsets: &HashMap<String, String>,
) -> MetaResult<Vec<String>> {
let (fragment_ids, env) = {
let core = self.core.lock().await;
// Check if source existsView on GitHub (pinned to 6469eb736d)