chore(buglog): bug-1768 fixed (34c52ccb); log bug-1863

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Rongsong Shen 2026-09-25 13:07:56 +00:00
parent b4e9a09925
commit a6a0502d62
Signed by untrusted user: rshen
GPG key ID: 80533536B0EB651C

View file

@ -25237,9 +25237,9 @@
},
{
"id": "bug-1768",
"status": "open",
"status_updated": "2026-09-24",
"status_note": "nested COMPOUND/ALTER primaries skip slot/rusage checks (seqjob_allocator.c, parjob_allocator.c)",
"status": "fixed",
"status_updated": "2026-09-25",
"status_note": "34c52ccb",
"timestamp": "2026-09-04T00:00:00Z",
"error_message": "OPEN, NOT A CRASH -- pre-existing, out-of-scope gap discovered during scheduler-allocation task 5.1's review (cache/dispatch wiring). seqjob_prepare_allocation() (src/scheduler/src/plugins/seqjob_allocator.c) and parjob_prepare_allocation() (src/scheduler/src/plugins/parjob_allocator.c) both silently `return 0` whenever `ctx->schedobj->tag != XCE_RESREQ_PRIMARY`. For a primary resource request nested inside a COMPOUND (or, transitively, an ALTER) job, `ctx->schedobj` remains the enclosing COMPOUND object for the entire per-primary allocation loop -- it is never swapped to a per-primary object -- so this guard fires for every nested primary and both prepare-allocation hooks no-op unconditionally.",
"root_cause": "CONFIRMED via direct code read and `git log --follow -p`: the `ctx->schedobj->tag != XCE_RESREQ_PRIMARY` guard predates the entire scheduler-allocation feature (introduced in commit 12dcc2a6, months before this branch's base commit 5a670676); task 3.1's seqjob rewrap (b18c5f78) did not touch or introduce it. Effect: `ctx->alloc_req.host`/`ctx->alloc_req.shared` are never populated for a nested primary's resource want, so `sched_check_host_satisfy()` trivially passes against an empty want vector regardless of a candidate host's real free capacity. Only the SELECT expression (if the resreq specifies one) still gates candidate hosts for a nested primary -- slot count and rusage (memory, etc.) are unconditionally treated as satisfied. This means every COMPOUND job (and transitively every ALTER job, since ALTER delegates to COMPOUND dispatch) with a nested primary resource request has never had its real slots/rusage availability checked by the scheduler, since this guard was introduced.",
@ -27951,6 +27951,26 @@
"related_bugs": [],
"occurrences": 1,
"last_seen": "2026-09-24T15:24:57Z"
},
{
"id": "bug-1863",
"status": "open",
"status_updated": "2026-09-25",
"status_note": "multi-primary COMPOUND: each primary's alloc overwrites ctx->alloc; needs merge",
"timestamp": "2026-09-25T13:07:56Z",
"error_message": "A COMPOUND resreq with 2+ primaries (e.g. '1*{A} + 2*{B}') keeps only the LAST primary's allocation: seqjob/parjob my_alloc assign ctx->alloc = make_job_alloc(...) per primary, overwriting (and leaking) the previous primary's job alloc, while every primary's hosts were already debited into ctx->uncomitted -- the dispatched allocation omits earlier primaries' hosts and accounting diverges from the decision.",
"file": "src/scheduler/src/scheduler.c,src/scheduler/src/plugins/seqjob_allocator.c,src/scheduler/src/plugins/parjob_allocator.c",
"root_cause": "sched_make_compound_alloc_() (scheduler.c) loops primaries on one ctx; each allocator's success path replaces ctx->alloc instead of merging host allocs (and shared allocs) across primaries. Latent until bug-1768 (fixed 2026-09-25) because nested primaries previously requested nothing.",
"fix": "",
"tags": [
"scheduler",
"allocation",
"compound",
"accounting"
],
"related_bugs": [],
"occurrences": 1,
"last_seen": "2026-09-25T13:07:56Z"
}
]
}