{"record":{"id":"34031387e2c55246","repo":"hashicorp/nomad","slug":"no-devices-available","errorCode":null,"errorMessage":"no devices available","messagePattern":"no devices available","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"scheduler/feasible/device.go","lineNumber":109,"sourceCode":"\t\t\t\t\tif equalBusID(busID, instanceBusID) {\n\t\t\t\t\t\tresult := int(node) == m.memoryNode\n\t\t\t\t\t\treturn result\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn false\n}\n\n// createOffer takes a device request and returns an assignment as well as a\n// score for the assignment. If no assignment is possible, an error is\n// returned explaining why.\nfunc (d *deviceAllocator) createOffer(mem *memoryNodeMatcher, ask *structs.RequestedDevice) (out *structs.AllocatedDeviceResource, score float64, err error) {\n\t// Try to hot path\n\tif len(d.Devices) == 0 {\n\t\treturn nil, 0.0, fmt.Errorf(\"no devices available\")\n\t}\n\tif ask.Count == 0 {\n\t\treturn nil, 0.0, fmt.Errorf(\"invalid request of zero devices\")\n\t}\n\n\t// Hold the current best offer\n\tvar offer *structs.AllocatedDeviceResource\n\tvar offerScore float64\n\tvar matchedWeights float64\n\n\t// Determine the devices that are feasible based on availability and\n\t// constraints\n\tfor id, devInst := range d.Devices {\n\t\t// Check if the device works\n\t\tif !nodeDeviceMatches(d.ctx, devInst.Device, ask) {\n\t\t\tcontinue\n\t\t}\n","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/scheduler/feasible/device.go#L91-L127","documentation":"Scheduler device allocator guard in createOffer: the node has no device groups at all, so the requested device cannot be offered. This makes the node infeasible for the device request rather than crashing the allocator.","triggerScenarios":"Thrown at scheduler/feasible/device.go:109 when the library encounters an invalid state.","commonSituations":"See trigger scenarios.","solutions":["Schedule the job on nodes running the required device plugin","Remove the device request if it is not actually needed","Verify the device plugin is fingerprinting devices on the target nodes"],"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-08T10:18:20.063Z"}