{"record":{"id":"2069c47a10d82256","repo":"hashicorp/nomad","slug":"numa-scheduling-requires-nomad-enterprise","errorCode":null,"errorMessage":"numa scheduling requires Nomad Enterprise","messagePattern":"numa scheduling requires Nomad Enterprise","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/job_endpoint_hook_numa_ce.go","lineNumber":20,"sourceCode":"// SPDX-License-Identifier: BUSL-1.1\n\n//go:build !ent\n\npackage nomad\n\nimport (\n\t\"errors\"\n\n\t\"github.com/hashicorp/nomad/nomad/structs\"\n)\n\n// Validate ensures job does not contain any task making use of the\n// resources.numa block, which is only supported in Nomad Enterprise.\nfunc (jobNumaHook) Validate(job *structs.Job) ([]error, error) {\n\tfor _, tg := range job.TaskGroups {\n\t\tfor _, task := range tg.Tasks {\n\t\t\tif task.Resources.NUMA.Requested() {\n\t\t\t\treturn nil, errors.New(\"numa scheduling requires Nomad Enterprise\")\n\t\t\t}\n\t\t}\n\t}\n\treturn nil, nil\n}\n\n// Mutate does nothing.\nfunc (jobNumaHook) Mutate(job *structs.Job) (*structs.Job, []error, error) {\n\treturn job, nil, nil\n}\n","sourceCodeStart":2,"sourceCodeEnd":31,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/job_endpoint_hook_numa_ce.go#L2-L31","documentation":"CE build guard (//go:build !ent) in jobNumaHook.Validate: a job declares a resources.numa block, but NUMA-aware scheduling is an Enterprise-only feature, so the job is rejected on the open-source edition.","triggerScenarios":"Submitting a job where a task's resources block contains `numa { ... }` (e.g. `numa { policy = \"strict\" }`) on a Nomad OSS (CE) server.","commonSituations":"Attempting NUMA pinning for latency-sensitive workloads (HPC, telco) on an OSS cluster; copying Enterprise job specs to CE.","solutions":["Remove the `resources.numa` block from the task.","Upgrade to Nomad Enterprise to use NUMA scheduling.","Rely on the OS scheduler / cgroup CPU pinning available in OSS instead."],"exampleFix":"// before\nresources {\n  cpu = 4000\n  numa {\n    policy = \"strict\"\n  }\n}\n\n// after\nresources {\n  cpu = 4000\n}","handlingStrategy":"validation","validationCode":"if task.Resources != nil && task.Resources.NUMA.Requested() {\n  return errors.New(\"numa scheduling requires Nomad Enterprise\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Don't copy resources.numa blocks into OSS job specs","Keep Enterprise-specific job files separated by edition","Run `nomad job validate` against the target server first"],"tags":["nomad","numa","enterprise-only","job-validation"],"backgroundTag":"nomad-enterprise-feature-required","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"}