hashicorp/nomad · error

plugin failed to return nodeid

Error message

plugin failed to return nodeid

What it means

CSI client guard in NodeGetInfo: the node plugin's NodeGetInfo RPC succeeded but returned an empty node ID, violating the CSI contract. The plugin is misbehaving; fingerprinting callers retry this call, so it surfaces repeatedly until fixed.

Source

Thrown at plugins/csi/client.go:774

	return NewNodeCapabilitySet(resp), nil
}

func (c *client) NodeGetInfo(ctx context.Context) (*NodeGetInfoResponse, error) {
	if err := c.ensureConnected(ctx); err != nil {
		return nil, err
	}

	result := &NodeGetInfoResponse{}

	// note: no grpc retries needed here, as this is called in
	// fingerprinting and will get retried by the caller
	resp, err := c.nodeClient.NodeGetInfo(ctx, &csipbv1.NodeGetInfoRequest{})
	if err != nil {
		return nil, err
	}

	if resp.GetNodeId() == "" {
		return nil, fmt.Errorf("plugin failed to return nodeid")
	}

	result.NodeID = resp.GetNodeId()
	result.MaxVolumes = resp.GetMaxVolumesPerNode()
	if result.MaxVolumes == 0 {
		// set safe default so that scheduler ignores this constraint when not set
		result.MaxVolumes = math.MaxInt64
	}

	topo := resp.GetAccessibleTopology()
	if topo != nil {
		result.AccessibleTopology = &Topology{Segments: topo.Segments}
	}

	return result, nil
}

func (c *client) NodeStageVolume(ctx context.Context, req *NodeStageVolumeRequest, opts ...grpc.CallOption) error {

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Fix the plugin so NodeGetInfo returns a stable non-empty node ID
  2. Upgrade or replace the CSI plugin with a compliant version
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at plugins/csi/client.go:774 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/e536d7bab05cbe9a. Report an issue: GitHub.