{"record":{"id":"4eec8b7702d6e21c","repo":"hashicorp/nomad","slug":"errunknownnode","errorCode":"ErrUnknownNode","errorMessage":"%w %s","messagePattern":"%w %s","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/csi_endpoint.go","lineNumber":1006,"sourceCode":"\t\tif wClaim.NodeID == claim.NodeID && wClaim.ExternalNodeID != \"\" {\n\t\t\treturn wClaim.ExternalNodeID, nil\n\t\t}\n\t}\n\tfor _, pClaim := range vol.PastClaims {\n\t\tif pClaim.NodeID == claim.NodeID && pClaim.ExternalNodeID != \"\" {\n\t\t\treturn pClaim.ExternalNodeID, nil\n\t\t}\n\t}\n\n\t// fallback to looking up the node plugin\n\tws := memdb.NewWatchSet()\n\tstate := v.srv.fsm.State()\n\ttargetNode, err := state.NodeByID(ws, claim.NodeID)\n\tif err != nil {\n\t\treturn \"\", err\n\t}\n\tif targetNode == nil {\n\t\treturn \"\", fmt.Errorf(\"%w %s\", structs.ErrUnknownNode, claim.NodeID)\n\t}\n\n\t// get the storage provider's ID for the client node (not\n\t// Nomad's ID for the node)\n\ttargetCSIInfo, ok := targetNode.CSINodePlugins[vol.PluginID]\n\tif !ok || targetCSIInfo.NodeInfo == nil {\n\t\treturn \"\", fmt.Errorf(\"failed to find storage provider info for client %q, node plugin %q is not running or has not fingerprinted on this client\", targetNode.ID, vol.PluginID)\n\t}\n\treturn targetCSIInfo.NodeInfo.ID, nil\n}\n\nfunc (v *CSIVolume) checkpointClaim(vol *structs.CSIVolume, claim *structs.CSIVolumeClaim) error {\n\tv.logger.Trace(\"checkpointing claim\")\n\treq := structs.CSIVolumeClaimRequest{\n\t\tVolumeID:     vol.ID,\n\t\tAllocationID: claim.AllocationID,\n\t\tNodeID:       claim.NodeID,\n\t\tClaim:        claim.Mode,","sourceCodeStart":988,"sourceCodeEnd":1024,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/csi_endpoint.go#L988-L1024","documentation":"Fires in lookupExternalNodeID: neither the volume's write nor past claims contain an external node ID for the claiming node, and the node itself no longer exists in the state store (structs.ErrUnknownNode wraps the node ID).","triggerScenarios":"Thrown at nomad/csi_endpoint.go:1006 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Verify the claiming client node is registered and not deregistered/purged","Re-run the client's node plugin so its ID can be fingerprinted","If the node is permanently gone, clean up the volume claim manually"],"exampleFix":null,"handlingStrategy":"validation","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-08T15:18:49.778Z"}