hashicorp/nomad · error
evals cannot be deleted by both ID and filter
Error message
evals cannot be deleted by both ID and filter
What it means
Returned by Evaluations.Delete when the caller supplies both a filter and explicit eval IDs. The API requires delete requests to be unambiguous: either select evals by filter OR by ID list, never both in the same call.
Source
Thrown at nomad/eval_endpoint.go:475
}
defer metrics.MeasureSince([]string{"nomad", "eval", "delete"}, time.Now())
// This RPC endpoint is very destructive and alters Nomad's core state,
// meaning only those with management tokens can call it.
if aclObj, err := e.srv.ResolveACL(args); err != nil {
return err
} else if !aclObj.IsManagement() {
return structs.ErrPermissionDenied
}
if args.Filter != "" && !e.srv.peersCache.ServersMeetMinimumVersion(
e.srv.Region(), minVersionEvalDeleteByFilter, true) {
return fmt.Errorf(
"all servers must be running version %v or later to delete evals by filter",
minVersionEvalDeleteByFilter)
}
if args.Filter != "" && len(args.EvalIDs) > 0 {
return fmt.Errorf("evals cannot be deleted by both ID and filter")
}
if args.Filter == "" && len(args.EvalIDs) == 0 {
return fmt.Errorf("evals must be deleted by either ID or filter")
}
// The eval broker must be disabled otherwise Nomad's state will likely get
// wild in a very un-fun way.
if e.srv.evalBroker.Enabled() {
return errors.New("eval broker is enabled; eval broker must be paused to delete evals")
}
if args.Filter != "" {
count, index, err := e.deleteEvalsByFilter(args)
if err != nil {
return err
}
// Update the index and return.View on GitHub (pinned to 482b49bf1a)
Solutions
- Remove either the Filter or the EvalIDs field from the request
- Issue two separate delete calls: one by ID, one by filter
Example fix
// before
req := &structs.EvalDeleteRequest{EvalIDs: ids, Filter: "Status == complete"}
// after
req := &structs.EvalDeleteRequest{EvalIDs: ids} // drop the filter Defensive patterns
Strategy: validation
Validate before calling
if filter != "" && len(ids) > 0 { return errors.New("specify either filter or eval IDs, not both") } Prevention
- Build delete requests with exactly one selection criterion
- Clear the filter when acting on user-selected eval IDs
- Write a small request-builder helper that enforces XOR semantics
When it happens
Trigger: Sending an EvalDeleteRequest with args.Filter set to a non-empty string AND len(args.EvalIDs) > 0.
Common situations: Client code that always populates EvalIDs and also adds a status filter; UI/tooling that combines 'selected evals' with an active filter expression without clearing one of them.
Related errors
- Must provide the NodeID
- Parameter for choose must be in form '<number>|<key>'
- missing node for client registration
- missing node ID for client registration
- missing datacenter for client registration
AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04).
Data as JSON: /api/errors/c0d29ddcd6b28d3b.
Report an issue: GitHub.