hashicorp/nomad · error

volume %q is already staged to %q but with incompatible capa

Error message

volume %q is already staged to %q but with incompatible capabilities for this request: %v

What it means

CSI client mapping in NodeStageVolume: the plugin returned gRPC AlreadyExists — the volume is already staged at the target path but with capabilities incompatible with this request (e.g. different access mode or mount flags).

Source

Thrown at plugins/csi/client.go:810

func (c *client) NodeStageVolume(ctx context.Context, req *NodeStageVolumeRequest, opts ...grpc.CallOption) error {
	if err := c.ensureConnected(ctx); err != nil {
		return err
	}
	err := req.Validate()
	if err != nil {
		return err
	}

	// NodeStageVolume's response contains no extra data. If err == nil, we were
	// successful.
	_, err = c.nodeClient.NodeStageVolume(ctx, req.ToCSIRepresentation(), opts...)
	if err != nil {
		code := status.Code(err)
		switch code {
		case codes.NotFound:
			err = fmt.Errorf("volume %q could not be found: %v", req.ExternalID, err)
		case codes.AlreadyExists:
			err = fmt.Errorf(
				"volume %q is already staged to %q but with incompatible capabilities for this request: %v",
				req.ExternalID, req.StagingTargetPath, err)
		case codes.FailedPrecondition:
			err = fmt.Errorf("volume %q does not have MULTI_NODE volume capability: %v",
				req.ExternalID, err)
		case codes.Internal:
			err = fmt.Errorf("node plugin returned an internal error, check the plugin allocation logs for more information: %v", err)
		}
	}

	return err
}

func (c *client) NodeUnstageVolume(ctx context.Context, volumeID string, stagingTargetPath string, opts ...grpc.CallOption) error {
	if err := c.ensureConnected(ctx); err != nil {
		return err
	}
	// These errors should not be returned during production use but exist as aids

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Make all allocations staging this volume use compatible mount/access-mode capabilities
  2. Unstage the volume (or restart the node plugin) to clear the conflicting staged state
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at plugins/csi/client.go:810 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/097cec969b60008d. Report an issue: GitHub.