--- 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