{"record":{"id":"e536d7bab05cbe9a","repo":"hashicorp/nomad","slug":"plugin-failed-to-return-nodeid","errorCode":null,"errorMessage":"plugin failed to return nodeid","messagePattern":"plugin failed to return nodeid","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"plugins/csi/client.go","lineNumber":774,"sourceCode":"\treturn NewNodeCapabilitySet(resp), nil\n}\n\nfunc (c *client) NodeGetInfo(ctx context.Context) (*NodeGetInfoResponse, error) {\n\tif err := c.ensureConnected(ctx); err != nil {\n\t\treturn nil, err\n\t}\n\n\tresult := &NodeGetInfoResponse{}\n\n\t// note: no grpc retries needed here, as this is called in\n\t// fingerprinting and will get retried by the caller\n\tresp, err := c.nodeClient.NodeGetInfo(ctx, &csipbv1.NodeGetInfoRequest{})\n\tif err != nil {\n\t\treturn nil, err\n\t}\n\n\tif resp.GetNodeId() == \"\" {\n\t\treturn nil, fmt.Errorf(\"plugin failed to return nodeid\")\n\t}\n\n\tresult.NodeID = resp.GetNodeId()\n\tresult.MaxVolumes = resp.GetMaxVolumesPerNode()\n\tif result.MaxVolumes == 0 {\n\t\t// set safe default so that scheduler ignores this constraint when not set\n\t\tresult.MaxVolumes = math.MaxInt64\n\t}\n\n\ttopo := resp.GetAccessibleTopology()\n\tif topo != nil {\n\t\tresult.AccessibleTopology = &Topology{Segments: topo.Segments}\n\t}\n\n\treturn result, nil\n}\n\nfunc (c *client) NodeStageVolume(ctx context.Context, req *NodeStageVolumeRequest, opts ...grpc.CallOption) error {","sourceCodeStart":756,"sourceCodeEnd":792,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/plugins/csi/client.go#L756-L792","documentation":"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.","triggerScenarios":"Thrown at plugins/csi/client.go:774 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Fix the plugin so NodeGetInfo returns a stable non-empty node ID","Upgrade or replace the CSI plugin with a compliant version"],"exampleFix":null,"handlingStrategy":"retry","validationCode":null,"typeGuard":null,"tryCatchPattern":null,"preventionTips":[],"tags":[],"backgroundTag":null,"analyzedSha":"482b49bf1aec006f089bcfc7e632d8f6ac303e5e","analyzedAt":"2026-09-04T07:54:14.808Z","contentChangedAt":"2026-09-04T07:54:14.808Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}