test(scheduler-sim-eager-reconciliation): task 3.1 resource-contention proof
Adds test_contention_capacity_check_correct_across_multi_round_dispatch_confirm_gap: a worker at exact capacity (jobs A=8.0 + C=2.0 against 10.0 capacity), with each job's RUN-state confirmation landing several rounds after its DISPATCH decision (round 1 dispatch, round 4/5 confirmation, deliberately different gaps). Drives the real sched_check_host_satisfy() admission check at three checkpoints, proving Requirement 1 (1.1-1.4) at the outcome level -- a capacity check, not just a resInUse display value -- per scheduler-driver-equivalence.md's explicit contention-fixture discipline. Round 1 review caught three new xce_sched_sim_driver_t fixtures declared stack-local, amplifying an already-documented (bug-1598, bug-1632) stack-use-after-return class from the never-joined picker thread sched_sim_driver_run() spawns. Fixed by declaring them static (safe: each is written by exactly one call site, and sched_sim_driver_start() memsets the struct first) -- independently confirmed via 3 full-suite runs with zero ASAN hits. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01AgYRU3zDTqNGV5Jk8aiKLg
This commit is contained in:
parent
c67382e6f1
commit
c971f7dc23
2 changed files with 316 additions and 1 deletions
|
|
@ -27,7 +27,7 @@
|
|||
- _Depends: 1.1_
|
||||
|
||||
- [ ] 3. Validation: end-to-end proof under contention, decision-verification mode, and full regression
|
||||
- [ ] 3.1 (P) Verify correct capacity accounting under resource contention with realistic dispatch-to-confirmation separation
|
||||
- [x] 3.1 (P) Verify correct capacity accounting under resource contention with realistic dispatch-to-confirmation separation
|
||||
- Build a replay fixture where a worker's capacity is insufficient for every candidate job, with dispatch decisions and their running-state confirmations recorded several rounds apart
|
||||
- Confirm the live capacity check sees the correct, non-zero resource-in-use total at each round rather than treating capacity as permanently free
|
||||
- Observable: a resource-contention test demonstrates the capacity check's view of resource usage matches what actually happened in the original recording at each round, not a permanently-zero reading
|
||||
|
|
@ -50,3 +50,8 @@
|
|||
- Observable: a full scheduler test suite run shows the same pass/fail baseline as before this feature, with only the new tests added by this feature as net-new coverage
|
||||
- _Requirements: 3.3, 4.1, 4.3, 4.5_
|
||||
- _Depends: 3.1, 3.2_
|
||||
|
||||
## Implementation Notes
|
||||
|
||||
- Task 1.2: the pre-existing `test_recordstart_symlink_escape_replies_error` failure (bug-1560, `test_admin_request.c`) is unrelated to this spec and appears in every task's full-suite run — do not treat it as a regression.
|
||||
- Task 3.1: any NEW `xce_sched_sim_driver_t` fixture passed to `sched_sim_driver_run()` in a scheduler test file MUST be declared `static`, not stack-local — `sched_sim_driver_run()` spawns a picker thread that is never joined and keeps reading the struct for the life of the process, so a stack-local instance is a latent stack-use-after-return once the test function returns (already-documented class, bug-1598/bug-1632; this spec's own task 3.1 round-1 review caught a live recurrence). `sched_sim_driver_start()` unconditionally `memset()`s the struct first, so `static` storage is safe as long as each fixture is written by exactly one call site.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue