- no preset field on the server: the client puts preset name + hash into the job's exdata JSON under 'meta', passed through uninterpreted; the worker skips 'meta' silently; 'preset report' filters jobs client-side - drop the local submission log idea - job-labels: independent backlog item (general server-side labels) - bug-1970: note the dropped REST 'tags' field Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
89 lines
4.3 KiB
Markdown
89 lines
4.3 KiB
Markdown
---
|
|
id: "bug-1970"
|
|
status: "open"
|
|
status_updated: "2026-10-12"
|
|
status_note: "newly logged"
|
|
component: "apiserver"
|
|
severity: "wrong-result"
|
|
timestamp: "2026-10-12T13:07:37Z"
|
|
last_seen: "2026-10-12T13:07:37Z"
|
|
occurrences: 1
|
|
files: ["src/frontend/apiserver/controllers/jobs.go", "src/frontend/apiserver/backend/convert.go", "src/frontend/apiserver/models/jobs.go"]
|
|
tags: ["apiserver", "submit", "silent-drop"]
|
|
related: ["bug-1968", "bug-1936"]
|
|
---
|
|
|
|
# bug-1970: apiserver accepts rerunable, requeue/checkpoint/runtime/warning submit options, never sends them
|
|
|
|
## Description
|
|
**Observed:** (source reading, 2026-10-12, at 83c6eb80)
|
|
`POST /xce/v1/jobs/create` accepts these `JobSubmitRequest` fields
|
|
(`src/frontend/apiserver/models/jobs.go`, struct at :636) and answers success,
|
|
but none of them reaches the controller:
|
|
```go
|
|
Rerunable bool `json:"rerunable,omitempty"`
|
|
WarningTimePeriod int `json:"warning_time_period,omitempty"`
|
|
WarningAction string `json:"warning_action,omitempty"`
|
|
RequeueErrorValues string `json:"requeue_error_values,omitempty"`
|
|
RunTimeEstimation int `json:"run_time_estimation,omitempty"`
|
|
MigThreshold int `json:"mig_threshold,omitempty"`
|
|
ChkpntPeriod int `json:"chkpnt_period,omitempty"`
|
|
ChkpntDir string `json:"chkpnt_dir,omitempty"`
|
|
InitChkpntPeriod int `json:"init_chkpnt_period,omitempty"`
|
|
```
|
|
- `rerunable`, `warning_time_period`, `warning_action`, `init_chkpnt_period`
|
|
are not read anywhere outside `models/`.
|
|
- `requeue_error_values`, `run_time_estimation`, `mig_threshold`,
|
|
`chkpnt_period`, `chkpnt_dir` are copied into `models.JobInfo`
|
|
(`controllers/jobs.go:1214-1218`, and on restart :1013-1025), but
|
|
`modelJobToSubmit()` (`backend/convert.go:334`) never reads them, and the
|
|
controller's `JobSubmitData` / `JobStartInfo` (`src/schema/controller.capnp`
|
|
:583, :314) have no field for them.
|
|
- None is in `preCheckSubmitOptions()`'s list of refused options
|
|
(`controllers/jobs.go:1285`), which bug-1936 added for exactly this kind of
|
|
option (in/out/err files, asked hosts, begin/term time).
|
|
|
|
**Expected:** each submit option is either passed on to the job or rejected
|
|
with 400 naming the option, as `preCheckSubmitOptions()` does for the others.
|
|
**Impact:** wrong result: a user asking for automatic requeue on given exit
|
|
codes, rerun on host failure, periodic checkpoints or a warning signal before
|
|
the run limit gets a success reply and a job that does none of it.
|
|
**Found by:** review during the `application-profile` brief discussion
|
|
(extra v1 attributes), 2026-10-12.
|
|
|
|
UPDATE (2026-10-12): The REST submit model's `Tags []string` (`json:"tags"`, models/jobs.go JobSubmitRequest) is also accepted and dropped: nothing outside models/ reads it, and it is not in preCheckSubmitOptions(). Roadmap item job-labels would reuse or replace it.
|
|
|
|
## Environment
|
|
- OS: no /etc/os-release; Docker container; NixOS kernel; kernel Linux 6.18.33 x86_64
|
|
- libc: n/a: found by source reading, no binary run (host ldd reports glibc 2.40)
|
|
- Toolchain: gcc (GCC) 15.2.0, meson 1.9.1
|
|
- Build: asan, debug or release alike (Go apiserver code path, independent of the C build profile)
|
|
- Code: scheduler-framework @ 83c6eb80-dirty
|
|
- Deployment: any: apiserver submit path, before the controller
|
|
|
|
## Reproduction
|
|
1. Deploy a single node with the apiserver (`/xce-deploy-ha localhost:9991`
|
|
plus the apiserver), log on, and keep the token in `$TOKEN`.
|
|
2. `curl -s -H "Authorization: Bearer $TOKEN" -H 'Content-Type: application/json' -d '{"queue":"normal","command":"exit 99","requeue_error_values":"99","rerunable":true,"chkpnt_period":5}' http://localhost:8080/xce/v1/jobs/create`
|
|
3. Observe a success reply; the job exits with 99 and goes to EXIT (no
|
|
requeue); `xcecli jobs list -l` shows no requeue, rerun or checkpoint
|
|
setting.
|
|
4. Static check: `grep -rn 'RequeueErrorValues\|Rerunable\|ChkpntPeriod' src/frontend/apiserver/backend/`
|
|
prints nothing.
|
|
- Frequency: deterministic (by construction; steps 1-3 not run live in this
|
|
session, step 4 run 2026-10-12)
|
|
- Evidence: not kept (source reading; file:line references above)
|
|
|
|
## Root cause
|
|
TODO: required for fixed/partial
|
|
|
|
## Fix
|
|
TODO: required for fixed/partial
|
|
|
|
## Verification
|
|
- Test: TODO: name + file; RED before the fix, GREEN after
|
|
- Suites: TODO: suite results and build profile
|
|
- Live: TODO: soak/deploy run, or n/a and why
|
|
|
|
## References
|
|
- Related: none
|