78 lines
3.7 KiB
Markdown
78 lines
3.7 KiB
Markdown
---
|
|
id: "bug-1953"
|
|
status: "fixed"
|
|
status_updated: "2026-10-10"
|
|
status_note: ""
|
|
component: "apiserver"
|
|
severity: "wrong-result"
|
|
timestamp: "2026-10-10T08:42:56Z"
|
|
last_seen: "2026-10-10T08:42:56Z"
|
|
occurrences: 1
|
|
files: ["src/frontend/apiserver/controllers/jobs.go"]
|
|
tags: ["apiserver", "submit", "validation"]
|
|
related: ["bug-1936"]
|
|
fix_commits: ["e00526f9"]
|
|
gitea_issue: 384
|
|
gitea_synced_status: "fixed"
|
|
gitea_synced_hash: "9ca87695edca"
|
|
---
|
|
|
|
# bug-1953: apiserver skips submit validation and limit conversion for any job submitted with a job name
|
|
|
|
## Description
|
|
**Observed:** (source reading, confirmed against the code on 2026-10-10)
|
|
`preCheckJobRequest()` (`src/frontend/apiserver/controllers/jobs.go:1308`)
|
|
returns from inside its job-name branch, before the rest of the checks run:
|
|
```go
|
|
if req.JobName != "" {
|
|
if strings.ContainsAny(req.JobName, "[]") {
|
|
...
|
|
return count, true, nil // jobs.go:1346, array name
|
|
}
|
|
...
|
|
return 1, false, nil // jobs.go:1366, plain name
|
|
}
|
|
```
|
|
Everything after the branch is skipped for every named job (and every array
|
|
job): the job-description, project-name and resreq length checks, resreq
|
|
validation, the `shell_limit` → limit conversion (`jobs.go:1405-1434`), and
|
|
the later env / launch-type validation and transfer-file parsing. Reported by
|
|
the bug-1936 fix: a named job with transfer files fails with
|
|
`failed to parse ExtendData JSON`.
|
|
|
|
**Expected:** every submission gets the same validation and conversions,
|
|
named or not; the name only decides array handling.
|
|
**Impact:** wrong result and missing validation: named and array jobs bypass
|
|
length and resreq checks (bad input reaches the controller and scheduler),
|
|
lose their shell limits, and fail at the worker when they carry transfers.
|
|
**Found by:** fix of bug-1936 (submit exdata), 2026-10-10.
|
|
## Environment
|
|
- OS: no /etc/os-release; Docker container; NixOS kernel; kernel Linux 6.18.33 x86_64
|
|
- libc: glibc 2.42-47 (interpreter /nix/store/wb6rhpznjfczwlwx23zmdrrw74bayxw4-glibc-2.42-47/lib/ld-linux-x86-64.so.2)
|
|
- Toolchain: gcc (GCC) 15.2.0, meson 1.9.1
|
|
- Build: asan (xce.build)
|
|
- Code: scheduler-framework @ b9747ad2-dirty
|
|
- Deployment: any (apiserver request validation; no cluster needed to show it)
|
|
|
|
## Reproduction
|
|
1. Submit `xcecli jobs submit -J myjob --cpu_limit 60000 sleep 1` and the same
|
|
job without `-J`.
|
|
2. Without a name the CPU limit is converted into the job's limits; with
|
|
`-J myjob` it is not. Likewise an over-long resreq or project name is
|
|
rejected only for the unnamed job.
|
|
- Frequency: deterministic (code path)
|
|
- Evidence: the code quoted in Description; no logs kept.
|
|
## Root cause
|
|
`preCheckJobRequest()` (`controllers/jobs.go`) returned from inside its job-name branch (`return count, true, nil` / `return 1, false, nil`), so everything after it was skipped for named and array jobs. Pre-existing.
|
|
|
|
## Fix
|
|
The name branch now only sets `n`/`isArray`; the function continues through every check and conversion and returns `n, isArray, nil` at the end.
|
|
|
|
## Verification
|
|
- Test: `TestPreCheckJobRequest_NamedJobsGetFullValidation` (`controllers/jobs_test.go`): RED `name "myjob": cpu limit not converted: got 0 s, want 60` and `an over-long project name was accepted` (same for `arr[1-3]`), GREEN after; whole controllers package ok.
|
|
- Suites: `xce-build.sh all asan xce.build --incremental` on the merged branch, 2026-10-10: all C suites Ok 155 / Fail 0, frontend Go unit tests ok, xceadmin tests ok; apiserver `CGO_ENABLED=0 go test ./...` (incl. middleware, router, cmd) ok
|
|
- Live: n/a: unit/fixture-level verification only; no live deployment was run (follow-up)
|
|
|
|
## References
|
|
- Fix commit: `e00526f9` (on `scheduler-framework`; worker-branch original in the merge)
|
|
- Review: `.kiro/reviews/project-gap-review-2026-10-10.md`
|