risingwavelabs/risingwave · error · BatchError

Serving vnode mapping not found for fragment

Error message

Serving vnode mapping not found for fragment {0}

What it means

BatchError::ServingVnodeMappingNotFound: the serving-stage vnode mapping for the given fragment id is missing from the frontend's cached mapping tables. It fires when a serving query tries to route reads to compute nodes for a matview fragment whose consistent-hash distribution info was never registered, was evicted during scale-out/reschedule, or the cache is stale relative to the fragment still referenced by the plan.

Solutions

  1. Retry after the frontend refreshes its fragment/vnode mapping cache from meta
  2. Check meta logs to confirm the fragment exists and a serving vnode mapping was broadcast
  3. If a matview was just created or rescheduled, re-run the query once caches converge
  4. Report as a bug if it persists for a stable fragment id
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at src/batch/src/error.rs:134 when the library encounters an invalid state.

Common situations: See trigger scenarios.


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

Appendix: source

Thrown at src/batch/src/error.rs:134

    ExternalSystemError(
        #[from]
        #[backtrace]
        BatchExternalSystemError,
    ),

    // Make the ref-counted type to be a variant for easier code structuring.
    // TODO(error-handling): replace with `thiserror_ext::Arc`
    #[error(transparent)]
    Shared(
        #[from]
        #[backtrace]
        Arc<Self>,
    ),

    #[error("Empty workers found")]
    EmptyWorkerNodes,

    #[error("Serving vnode mapping not found for fragment {0}")]
    ServingVnodeMappingNotFound(FragmentId),

    #[error("Streaming vnode mapping has not been initialized")]
    StreamingVnodeMappingNotInitialized,

    #[error("Streaming vnode mapping not found for fragment {0}")]
    StreamingVnodeMappingNotFound(FragmentId),

    #[error("Not enough memory to run this query, batch memory limit is {0} bytes")]
    OutOfMemory(u64),

    #[error("Failed to spill out to disk")]
    Spill(
        #[from]
        #[backtrace]
        opendal::Error,
    ),

View on GitHub (pinned to 6469eb736d)