myxce/.wolf/bugs/bug-1970.md
Rongsong Shen a68d2fc965
docs(spec): presets record themselves in exdata.meta; job-labels backlog item
- 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>
2026-10-12 13:26:09 +00:00

4.3 KiB

id status status_updated status_note component severity timestamp last_seen occurrences files tags related
bug-1970 open 2026-10-12 newly logged apiserver wrong-result 2026-10-12T13:07:37Z 2026-10-12T13:07:37Z 1
src/frontend/apiserver/controllers/jobs.go
src/frontend/apiserver/backend/convert.go
src/frontend/apiserver/models/jobs.go
apiserver
submit
silent-drop
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:

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