risingwavelabs/risingwave · error · anyhow::Error
empty vnode bitmap
Error message
empty vnode bitmap
What it means
An `UpdateVnodeRequest` must include a `vnode_bitmap` describing which virtual nodes this sink coordinator instance handles; this error fires when the field is None. The bitmap is required to compute fragment/vnode mappings for the sink's parallelism, so an absent one makes the update meaningless.
Source
Thrown at src/meta/src/manager/sink_coordination/handle.rs:146
&& request.epoch < prev_epoch
{
return Poll::Ready(Err(anyhow!(
"invalid commit epoch {}, prev_epoch {}",
request.epoch,
prev_epoch
)));
}
if request.metadata.is_none() {
return Poll::Ready(Err(anyhow!("empty commit metadata")));
};
self.prev_epoch = Some(request.epoch);
}
coordinate_request::Msg::UpdateVnodeRequest(request) => {
let bitmap = Bitmap::from(
request
.vnode_bitmap
.as_ref()
.ok_or_else(|| anyhow!("empty vnode bitmap"))?,
);
self.vnode_bitmap = bitmap;
}
};
request
};
Poll::Ready(result)
}
}
View on GitHub (pinned to 6469eb736d)
Solutions
- Fix the executor to only send `UpdateVnodeRequest` once a valid bitmap is computed from the fragment vnode mappings.
- Upgrade to a version where vnode distribution requests always carry the bitmap.
- Check fragment/sink metadata in the meta catalog to ensure the sink has a valid parallelism assignment.
- Add a debug assertion on the executor that the bitmap is non-empty/Some before sending.
Example fix
// before
UpdateVnodeRequest { vnode_bitmap: None }
// after
UpdateVnodeRequest { vnode_bitmap: Some( bitmap.into() ) } Defensive patterns
Strategy: validation
Validate before calling
// Executor side: only send vnode updates once a bitmap is known
if vnode_bitmap.is_none() {
tracing::warn!("no vnode distribution yet; deferring UpdateVnodeRequest");
return;
} Try / catch
if let Err(e) = coordinator_next_request() {
if e.to_string().contains("empty vnode bitmap") {
tracing::error!("UpdateVnodeRequest missing bitmap; recompute fragment distribution");
}
} Prevention
- Compute the vnode bitmap from fragment metadata before issuing UpdateVnodeRequest
- Defer vnode updates until scaling/migration completes
- Assert bitmap presence executor-side before send
When it happens
Trigger: The sink executor sends `UpdateVnodeRequest` without setting `vnode_bitmap`, typically after a scaling/rescheduling event where the executor failed to fetch the new fragment distribution.
Common situations: Race during parallelism change or migration where the executor's vnode distribution is not yet populated; version skew between executor and meta; bug in the code that derives the bitmap from fragment metadata.
Understand the failure class
Background: "missing required argument" and "the following required arguments were not provided": what required-argument errors mean and how to fix them — this error's family across 20 libraries.
Related errors
- None msg in request
- failed to send the commit response for epoch {}
- failed to send the stopped response
- end of request stream
- empty commit metadata
AI-assisted analysis of risingwavelabs/risingwave@6469eb736d (2026-09-11).
Data as JSON: /api/errors/9bead0426a13c2a7.
Report an issue: GitHub.