hashicorp/nomad · error
unexpectedly did not forward CSIVolume.List to region %q
Error message
unexpectedly did not forward CSIVolume.List to region %q
What it means
namespaceNoAssociatedVolumesInRegion forwards CSIVolume.List to a remote region to ensure no CSI volumes remain in the namespace before deletion. When the forward helper returns done=false (request not dispatched to the remote server), this internal error is returned with the region name and the namespace delete aborts.
Source
Thrown at nomad/namespace_endpoint.go:387
return true, nil
}
// namespaceNoAssociatedVolumesInRegion returns true if there are no volumes
// associated with the namespace in the given region.
func (n *Namespace) namespaceNoAssociatedVolumesInRegion(authToken, namespace, region string) (bool, error) {
volumesReq := &structs.CSIVolumeListRequest{
QueryOptions: structs.QueryOptions{
Region: region,
Namespace: namespace,
AllowStale: false,
AuthToken: authToken,
},
}
var volumesResp structs.CSIVolumeListResponse
done, err := n.srv.forward("CSIVolume.List", volumesReq, volumesReq, &volumesResp)
if !done {
return false, fmt.Errorf("unexpectedly did not forward CSIVolume.List to region %q", region)
} else if err != nil {
return false, err
}
for _, volume := range volumesResp.Volumes {
if volume.Namespace == namespace {
return false, nil
}
}
return true, nil
}
// namespaceNoAssociatedVarsInRegion returns true if there are no variables
// associated with the namespace in the given region.
func (n *Namespace) namespaceNoAssociatedVarsInRegion(authToken, namespace, region string) (bool, error) {
varReq := &structs.VariablesListRequest{
QueryOptions: structs.QueryOptions{
Region: region,View on GitHub (pinned to 482b49bf1a)
Solutions
- Check connectivity/federation health to the target region before deleting.
- Inspect CSI volume state per region (nomad volume status) once reachable.
- Fix server region configuration and retry the deletion.
Defensive patterns
Strategy: retry
Validate before calling
for _, region := range regions {
if _, _, err := client.Agent().MembersOpts(&api.QueryOptions{Region: region}); err != nil {
return fmt.Errorf("region %s unreachable before CSI volume check: %w", region, err)
}
} Try / catch
if err != nil && strings.Contains(err.Error(), "did not forward CSIVolume.List") {
// restore region federation/connectivity, verify volume state, retry
} Prevention
- Keep CSI plugins and regions healthy before namespace cleanup.
- Monitor federation health across datacenters.
- Remove stale region entries from tooling after decommissioning a DC.
When it happens
Trigger: Deleting a namespace whose CSI volumes must be checked in another region where forwarding fails; peer region unreachable; routing failure producing done=false.
Common situations: Multi-region clusters using CSI storage plugins with an offline region; federation misconfiguration; stale region entries after decommissioning a datacenter.
Related errors
- controller list volumes: %v
- controller create snapshot: %v
- controller delete snapshot: %v
- controller list snapshots: %v
- %s error: %w
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/4a60a26d868ee6fd.
Report an issue: GitHub.