refactor(scheduler): move job-total limit computation to the limit plugin (bug-1790)
bug-1790's fix worked but put limit-plugin-specific logic in the wrong place: seqjob_prepare_allocation()/parjob_prepare_allocation() (the allocator plugins) unconditionally pre-computed a job-wide total for every per-host resource in the job's rusages, "just in case" some global limit needed one. That's the allocator plugins' concern leaking into limit evaluation -- duplicated across both allocators (a third would need it too), and wasteful (computed for resources no limit actually references). Moved ownership to sched_fill_limit_requests() (resource.c), called once centrally from plugin_prepare_allocation() regardless of which allocator ran: - Removed calc_wanted_host_resval_job_totals() and its calls from both allocator plugins entirely. - Added calc_wanted_job_total_resval() (resreq.c): an on-demand, single-resource lookup by name (no resmgr/key_find needed -- the caller already has the resolved xce_resource_t), computing the same job-wide-total formula only for the one (scope, underlying-resource) combination that needs it -- a GLOBAL limit on a per-host resource. The other three combinations are unchanged, still reading straight out of alloc_req. - sched_fill_limit_requests() gains rusages/nhosts/nslots parameters back (a genuine need this time, not a re-added unused one). plugin.c's two call sites pass obj->u.primary->resreq->rusages (NULL for COMPOUND/ALTER, matching this codebase's existing scope convention for those tags) and ctx->nhosts/ctx->nslots. All 23 testsuite link-satisfying stubs mechanically updated. Removed the two allocator-level regression tests from the first pass (the behavior they proved no longer exists by design); rewrote test_fill_limit_requests_global_limit_on_host_resource_reads_host to exercise the new on-demand path directly, nslots=3 to prove the job's WHOLE total is used. Full xce-build.sh all asan --incremental: 94/94 Ok, zero regressions. Live re-verified against the same ug1_global_mem deploy/scenario: byte-identical scheduler trace to the pre-refactor result, confirming behavior-preserving. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GLfB5uWRdmx2WiZSFC7Fm7
This commit is contained in:
parent
b612f80bd6
commit
fa34b038f7
33 changed files with 308 additions and 350 deletions
|
|
@ -315,8 +315,8 @@ extern int calc_wanted_global_resvals(xvec_idval_t*, var, xlist_t*,
|
|||
rusage_per_type_t, int, int);
|
||||
extern int calc_wanted_host_resvals(xvec_idval_t*, var, xlist_t*,
|
||||
rusage_per_type_t, int, int);
|
||||
extern int calc_wanted_host_resval_job_totals(xvec_idval_t*, var, xlist_t*,
|
||||
rusage_per_type_t, int, int);
|
||||
extern int calc_wanted_job_total_resval(xlist_t*, rusage_per_type_t, int,
|
||||
int, const char*, float*);
|
||||
|
||||
/*
|
||||
* Overwrite minTasks/maxTasks on resreq's own top-level primary with the
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue