{"record":{"id":"babc9044c9a6bba3","repo":"hashicorp/nomad","slug":"parameter-for-choose-must-be-in-form-number-ke","errorCode":null,"errorMessage":"Parameter for choose must be in form '<number>|<key>'","messagePattern":"Parameter for choose must be in form '<number>\\|<key>'","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"error","filePath":"nomad/structs/errors.go","lineNumber":67,"sourceCode":"\terrDeploymentRunningNoUnblock    = \"can't unblock running deployment\"\n)\n\nvar (\n\tErrNoLeader                   = errors.New(errNoLeader)\n\tErrNotReadyForConsistentReads = errors.New(errNotReadyForConsistentReads)\n\tErrNoRegionPath               = errors.New(errNoRegionPath)\n\tErrTokenNotFound              = errors.New(errTokenNotFound)\n\tErrTokenExpired               = errors.New(errTokenExpired)\n\tErrTokenInvalid               = errors.New(errTokenInvalid)\n\tErrPermissionDenied           = errors.New(errPermissionDenied)\n\tErrJobRegistrationDisabled    = errors.New(errJobRegistrationDisabled)\n\tErrNoNodeConn                 = errors.New(errNoNodeConn)\n\tErrUnknownMethod              = errors.New(errUnknownMethod)\n\tErrUnknownNomadVersion        = errors.New(errUnknownNomadVersion)\n\tErrNodeLacksRpc               = errors.New(errNodeLacksRpc)\n\tErrMissingAllocID             = errors.New(errMissingAllocID)\n\tErrIncompatibleFiltering      = errors.New(errIncompatibleFiltering)\n\tErrMalformedChooseParameter   = errors.New(errMalformedChooseParameter)\n\n\t// ErrResultPaginatorCreation is returned by list RPC handlers when the\n\t// result paginator cannot be built, for example when the server cannot\n\t// evaluate a requested filter expression. api.ResultPaginatorErrorContent\n\t// duplicates its message so the CLI can match it without importing structs.\n\t// Keep the two in sync.\n\tErrResultPaginatorCreation = errors.New(errResultPaginatorCreation)\n\n\tErrUnknownNode = errors.New(ErrUnknownNodePrefix)\n\n\tErrDeploymentTerminalNoCancel    = errors.New(errDeploymentTerminalNoCancel)\n\tErrDeploymentTerminalNoFail      = errors.New(errDeploymentTerminalNoFail)\n\tErrDeploymentTerminalNoPause     = errors.New(errDeploymentTerminalNoPause)\n\tErrDeploymentTerminalNoPromote   = errors.New(errDeploymentTerminalNoPromote)\n\tErrDeploymentTerminalNoResume    = errors.New(errDeploymentTerminalNoResume)\n\tErrDeploymentTerminalNoUnblock   = errors.New(errDeploymentTerminalNoUnblock)\n\tErrDeploymentTerminalNoRun       = errors.New(errDeploymentTerminalNoRun)\n\tErrDeploymentTerminalNoSetHealth = errors.New(errDeploymentTerminalNoSetHealth)","sourceCodeStart":49,"sourceCodeEnd":85,"githubUrl":"https://github.com/hashicorp/nomad/blob/482b49bf1aec006f089bcfc7e632d8f6ac303e5e/nomad/structs/errors.go#L49-L85","documentation":"This error is returned by the choose filtering function when its parameter is not in the '<number>|<key>' format. Nomad's 'choose' filter splits the parameter on '|' and requires exactly two parts: an integer count and a key string. Anything else is rejected as malformed.","triggerScenarios":"Calling an RPC (e.g. service registration list) with a filter/parameter expression like 'choose' whose argument is missing the '|' separator, has a non-integer first token (e.g. 'abc|key'), or omits one of the two tokens.","commonSituations":"Hand-written job or query parameters with typos, programmatic string building that leaves the count empty ('|key'), passing a plain number without the key ('2' with no '|key'), or copying expressions across Nomad versions where the syntax changed.","solutions":["Change the parameter to '<number>|<key>', e.g. '2|service-name'.","Ensure the first token is a valid integer parseable by strconv.Atoi (no spaces or letters).","Include the '|' separator and a non-empty key as the second token.","Verify the expression is generated/escaped correctly if built programmatically."],"exampleFix":"// before\nchoose(\"2 service.web\")\n// after\nchoose(\"2|service.web\")","handlingStrategy":"validation","validationCode":"tokens := strings.SplitN(param, \"|\", 2)\nif len(tokens) != 2 {\n    return fmt.Errorf(\"choose parameter must be '<number>|<key>', got %q\", param)\n}\nif _, err := strconv.Atoi(tokens[0]); err != nil {\n    return fmt.Errorf(\"choose count %q is not an integer\", tokens[0])\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Always build choose parameters with fmt.Sprintf(\"%d|%s\", n, key).","Unit-test filter/parameter generation code.","Validate integer tokens before sending RPCs."],"tags":["validation","rpc","filtering","nomad"],"backgroundTag":"malformed-filter-parameter","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"}