diff --git a/.kiro/specs/scheduler-sim-decision-trace/tasks.md b/.kiro/specs/scheduler-sim-decision-trace/tasks.md index 80dde5ae..40ed4168 100644 --- a/.kiro/specs/scheduler-sim-decision-trace/tasks.md +++ b/.kiro/specs/scheduler-sim-decision-trace/tasks.md @@ -62,7 +62,7 @@ - rollback merging. - _Requirements: 4.6, 4.9, 5.8, 5.9, 5.10, 9.3_ -- [ ] 1.6 Make every white-box test that includes a hooked scheduler source also compile the trace model and capture sources +- [x] 1.6 Make every white-box test that includes a hooked scheduler source also compile the trace model and capture sources - Use the design's include-pattern search to find the 28 tests that include the election, scheduler, allocator-runner, host-iterator, resource or live-driver sources. Give each one the trace model and capture sources, so the live-driver change in 1.7 and the hook tasks after it still link. - Done when the full scheduler test suite builds and passes under ASAN with the new includes and no hooks in place yet. - _Requirements: 11.4_ @@ -343,3 +343,4 @@ - 1.4: `sched_trace_host_verdict(rec, 0, err)` means "derive from rows" (rec->host_row_verdicts shortfall/limit, else SELECT, phase per-host); an explicit SELECT is the pre-filter phase. 2.2's row capture must set host_row_verdicts and 3.3/3.4 hooks must follow this. `sched_trace_pos_scan_error` stores no entry; it turns the next UNFILLED position end into SCAN_ERROR. Plan numbers restart per requirement. trace.h forward-declares `struct xce_alloc_plan_s` (tag added in alloc_iter.h) to avoid the core.h include loop. `resreq_begin` may store a NULL req name for a NULL rusage; 4.1's renderer must tolerate it. - 1.5: the per-limit summary tally goes through `sched_trace_host_limit_hit(rec, limit, scope)` (added; not in the design's interface); 2.2 calls it for each unmet limit row in a host scope and keeps setting `host_row_verdicts |= SHORTFALL` directly. At summary level `pos_end` stores a POS_SUMMARY in place of POS_END, keeping the end state, error and host; 4.1 must render a scan error in that line. The search-end statement is written only when rc==0. - 1.5 OPEN for 3.4/4.1: a requirement the allocator declines (alloc_runner.c ~474) or whose plan generator fails to start (~427, returns 0) never reaches `sched_trace_search_end` when that call sits only at the last return, so `reqs_none_generated` misses it (Req 4.7, 9.3); calling search_end on that path as well double-reports "no plan generated". Settle it in 3.4, e.g. `sched_trace_no_plan` bumps the counter and search_end skips its statement when a no-plan entry is open. `test_search_end_nonzero_rc_has_no_statement` models a generator failure as rc -12, but the runner returns 0 there. +- 1.6: 27 tests include a hooked source and now `#include` sched_trace.c and sched_trace_capture.c. test_snapshot_load_allocator_regression.c matches the grep only in a comment and links scheduler_srcs, which already has both. Still open for the hook tasks: `sched_sim_isolation_lib` (src/scheduler/meson.build ~165-173) compiles the hooked `sched_election.c` without the trace sources (1.8/3.1 must add them or a stub). The 19 repl/sim tests matched via repl.c/sim_loop.c belong to 5.1. diff --git a/src/scheduler/testsuite/test.c b/src/scheduler/testsuite/test.c index 19c11e1d..6c35cf99 100644 --- a/src/scheduler/testsuite/test.c +++ b/src/scheduler/testsuite/test.c @@ -11,6 +11,9 @@ /* Pull resource.c into this TU so static helpers are visible for white-box testing. * This also brings in scheduler.h (with the real xce_scheduler_t) and all deps. */ #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" /* scheduler-sim-live-allocation spec, task 1.3: sim.h only depends on * core.h (+ stdbool/stdint/stdio, per its own header comment), so it is diff --git a/src/scheduler/testsuite/test_admin_request.c b/src/scheduler/testsuite/test_admin_request.c index 5e9d6074..0a0395a3 100644 --- a/src/scheduler/testsuite/test_admin_request.c +++ b/src/scheduler/testsuite/test_admin_request.c @@ -109,6 +109,9 @@ #include "../src/core_clock.c" #include "../src/core_events.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/recording.c" #include "../src/recording_events.c" #include "../src/snapshot.c" diff --git a/src/scheduler/testsuite/test_alloc_equivalence_parjob.c b/src/scheduler/testsuite/test_alloc_equivalence_parjob.c index 1586f970..f1f80c56 100644 --- a/src/scheduler/testsuite/test_alloc_equivalence_parjob.c +++ b/src/scheduler/testsuite/test_alloc_equivalence_parjob.c @@ -23,6 +23,9 @@ #include "../src/schedobj.c" #include "../src/host_iter.c" #include "../src/alloc_runner.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugins/parjob_allocator.c" /* Link-satisfying stubs (same convention as test_seqjob_allocator.c). */ diff --git a/src/scheduler/testsuite/test_alloc_equivalence_seqjob.c b/src/scheduler/testsuite/test_alloc_equivalence_seqjob.c index 3f5e4288..8b40c9dd 100644 --- a/src/scheduler/testsuite/test_alloc_equivalence_seqjob.c +++ b/src/scheduler/testsuite/test_alloc_equivalence_seqjob.c @@ -38,6 +38,9 @@ #include "../src/schedobj.c" #include "../src/host_iter.c" #include "../src/alloc_runner.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugins/seqjob_allocator.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_alloc_equivalence_seqjob_changes.c b/src/scheduler/testsuite/test_alloc_equivalence_seqjob_changes.c index ca46ac22..629066ac 100644 --- a/src/scheduler/testsuite/test_alloc_equivalence_seqjob_changes.c +++ b/src/scheduler/testsuite/test_alloc_equivalence_seqjob_changes.c @@ -36,6 +36,9 @@ #include "../src/schedobj.c" #include "../src/host_iter.c" #include "../src/alloc_runner.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugins/seqjob_allocator.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_alloc_runner.c b/src/scheduler/testsuite/test_alloc_runner.c index e1d5cd1f..7bdaf20c 100644 --- a/src/scheduler/testsuite/test_alloc_runner.c +++ b/src/scheduler/testsuite/test_alloc_runner.c @@ -29,6 +29,9 @@ #include "../src/core.c" #include "../src/host_iter.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/schedobj.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_alloc_runner_result.c b/src/scheduler/testsuite/test_alloc_runner_result.c index ba903809..0f79cbf6 100644 --- a/src/scheduler/testsuite/test_alloc_runner_result.c +++ b/src/scheduler/testsuite/test_alloc_runner_result.c @@ -38,6 +38,9 @@ static void* test_calloc(size_t n, size_t sz); #include "../src/core.c" #include "../src/host_iter.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/schedobj.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_alloc_runner_search.c b/src/scheduler/testsuite/test_alloc_runner_search.c index 55d21f4e..ef6c143e 100644 --- a/src/scheduler/testsuite/test_alloc_runner_search.c +++ b/src/scheduler/testsuite/test_alloc_runner_search.c @@ -34,6 +34,9 @@ static void* test_realloc(void* p, size_t n); #include "../src/core.c" #include "../src/host_iter.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/schedobj.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_core_events.c b/src/scheduler/testsuite/test_core_events.c index d0ceffa1..ab0b3e5f 100644 --- a/src/scheduler/testsuite/test_core_events.c +++ b/src/scheduler/testsuite/test_core_events.c @@ -70,6 +70,9 @@ #include "../src/core.c" #include "../src/core_events.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" void kill_sched_job(void* arg) { (void)arg; } void kill_sched_queue(void* arg) { (void)arg; } diff --git a/src/scheduler/testsuite/test_driver_decision_cb.c b/src/scheduler/testsuite/test_driver_decision_cb.c index b3076289..ad5968c4 100644 --- a/src/scheduler/testsuite/test_driver_decision_cb.c +++ b/src/scheduler/testsuite/test_driver_decision_cb.c @@ -60,6 +60,9 @@ #include "../src/core_events.c" #include "../src/decision.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" void kill_sched_job(void* arg) { (void)arg; } void kill_sched_queue(void* arg) { (void)arg; } diff --git a/src/scheduler/testsuite/test_driver_session_ordering.c b/src/scheduler/testsuite/test_driver_session_ordering.c index 20791675..841bba4e 100644 --- a/src/scheduler/testsuite/test_driver_session_ordering.c +++ b/src/scheduler/testsuite/test_driver_session_ordering.c @@ -163,6 +163,9 @@ #include "../src/core_session.c" #include "../src/decision.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugin.c" void kill_sched_job(void* arg) { (void)arg; } diff --git a/src/scheduler/testsuite/test_driver_translate.c b/src/scheduler/testsuite/test_driver_translate.c index 29fd8027..a539e800 100644 --- a/src/scheduler/testsuite/test_driver_translate.c +++ b/src/scheduler/testsuite/test_driver_translate.c @@ -58,6 +58,9 @@ #include "../src/core_clock.c" #include "../src/core_events.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" void kill_sched_job(void* arg) { (void)arg; } void kill_sched_queue(void* arg) { (void)arg; } diff --git a/src/scheduler/testsuite/test_host_iter.c b/src/scheduler/testsuite/test_host_iter.c index 19573697..06182dc9 100644 --- a/src/scheduler/testsuite/test_host_iter.c +++ b/src/scheduler/testsuite/test_host_iter.c @@ -68,6 +68,9 @@ #include "../src/resource.c" #include "../src/schedobj.c" #include "../src/host_iter.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" /* Link-satisfying stubs -- identical set to test_resource_accounting.c's * own (see that file's header comment for the full rationale). None of diff --git a/src/scheduler/testsuite/test_parjob_combinatorial.c b/src/scheduler/testsuite/test_parjob_combinatorial.c index 31767c2c..fe0a8018 100644 --- a/src/scheduler/testsuite/test_parjob_combinatorial.c +++ b/src/scheduler/testsuite/test_parjob_combinatorial.c @@ -94,6 +94,9 @@ #include "../src/host_iter.c" #include "../src/plugins/parjob_allocator.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/schedobj.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_record_lifecycle.c b/src/scheduler/testsuite/test_record_lifecycle.c index 2b67d9fb..4f14e6cb 100644 --- a/src/scheduler/testsuite/test_record_lifecycle.c +++ b/src/scheduler/testsuite/test_record_lifecycle.c @@ -95,6 +95,9 @@ #include "../src/core_events.c" #include "../src/core_session.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugin.c" #include "../src/recording.c" #include "../src/recording_events.c" diff --git a/src/scheduler/testsuite/test_resource_accounting.c b/src/scheduler/testsuite/test_resource_accounting.c index 9c62480d..2d71d087 100644 --- a/src/scheduler/testsuite/test_resource_accounting.c +++ b/src/scheduler/testsuite/test_resource_accounting.c @@ -90,6 +90,9 @@ * see this file's own header comment for why schedobj.c specifically). */ #include "../src/core.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/schedobj.c" void plugin_unregister(void* arg) { (void)arg; } diff --git a/src/scheduler/testsuite/test_resval_ownership.c b/src/scheduler/testsuite/test_resval_ownership.c index db0383f1..ed400725 100644 --- a/src/scheduler/testsuite/test_resval_ownership.c +++ b/src/scheduler/testsuite/test_resval_ownership.c @@ -85,6 +85,9 @@ #include "../src/core_clock.c" #include "../src/core_events.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" void kill_sched_job(void* arg) { (void)arg; } void kill_sched_queue(void* arg) { (void)arg; } diff --git a/src/scheduler/testsuite/test_seqjob_allocator.c b/src/scheduler/testsuite/test_seqjob_allocator.c index 72add1a2..d0a87414 100644 --- a/src/scheduler/testsuite/test_seqjob_allocator.c +++ b/src/scheduler/testsuite/test_seqjob_allocator.c @@ -50,6 +50,9 @@ #include "../src/schedobj.c" #include "../src/host_iter.c" #include "../src/alloc_runner.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugins/seqjob_allocator.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_seqjob_rewrap_equivalence.c b/src/scheduler/testsuite/test_seqjob_rewrap_equivalence.c index 62b937b2..c175bff9 100644 --- a/src/scheduler/testsuite/test_seqjob_rewrap_equivalence.c +++ b/src/scheduler/testsuite/test_seqjob_rewrap_equivalence.c @@ -93,6 +93,9 @@ #include "../src/schedobj.c" #include "../src/host_iter.c" #include "../src/alloc_runner.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugins/seqjob_allocator.c" /* ---------------------------------------------------------------------- */ diff --git a/src/scheduler/testsuite/test_sim_contention_parity.c b/src/scheduler/testsuite/test_sim_contention_parity.c index e16b4c92..1d71fab8 100644 --- a/src/scheduler/testsuite/test_sim_contention_parity.c +++ b/src/scheduler/testsuite/test_sim_contention_parity.c @@ -206,6 +206,9 @@ #include "../src/repl_info.c" #include "../src/repl_params.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/sim.c" #include "../src/sim_loop.c" #include "../src/sim_picker.c" /* bug-1567: sched_sim_driver_run() calls sim_bootstrap_picker() (sim_loop.c-cap sibling) as an extern -- undefined reference at link time otherwise */ diff --git a/src/scheduler/testsuite/test_sim_e2e_original_motivation.c b/src/scheduler/testsuite/test_sim_e2e_original_motivation.c index e129f37e..86168dd6 100644 --- a/src/scheduler/testsuite/test_sim_e2e_original_motivation.c +++ b/src/scheduler/testsuite/test_sim_e2e_original_motivation.c @@ -200,6 +200,9 @@ #include "../src/repl_info.c" #include "../src/repl_params.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/sim.c" #include "../src/sim_loop.c" #include "../src/sim_picker.c" /* bug-1567: sched_sim_driver_run() calls sim_bootstrap_picker() (sim_loop.c-cap sibling) as an extern -- undefined reference at link time otherwise */ diff --git a/src/scheduler/testsuite/test_sim_equivalence.c b/src/scheduler/testsuite/test_sim_equivalence.c index cb88989a..2e206c47 100644 --- a/src/scheduler/testsuite/test_sim_equivalence.c +++ b/src/scheduler/testsuite/test_sim_equivalence.c @@ -189,6 +189,9 @@ #include "../src/core_session.c" #include "../src/decision.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugin.c" #include "../src/plugins/builtin_fcfs.c" #include "../src/recording.c" diff --git a/src/scheduler/testsuite/test_sim_reconcile_unaccounted.c b/src/scheduler/testsuite/test_sim_reconcile_unaccounted.c index 4bfa71d8..9079196c 100644 --- a/src/scheduler/testsuite/test_sim_reconcile_unaccounted.c +++ b/src/scheduler/testsuite/test_sim_reconcile_unaccounted.c @@ -137,6 +137,9 @@ #include "../src/repl_info.c" #include "../src/repl_params.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/sim.c" #include "../src/sim_loop.c" #include "../src/sim_picker.c" /* bug-1567: sim_loop.c calls sim_bootstrap_picker() (sim_loop.c-cap sibling) as an extern -- undefined reference at link time otherwise */ diff --git a/src/scheduler/testsuite/test_sim_resource_contention.c b/src/scheduler/testsuite/test_sim_resource_contention.c index 3ae5bb6b..f943a612 100644 --- a/src/scheduler/testsuite/test_sim_resource_contention.c +++ b/src/scheduler/testsuite/test_sim_resource_contention.c @@ -144,6 +144,9 @@ #include "../src/repl_info.c" #include "../src/repl_params.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/sim.c" #include "../src/sim_loop.c" #include "../src/sim_picker.c" /* bug-1567: sched_sim_driver_run() now calls sim_bootstrap_picker() (sim_loop.c-cap sibling) as an extern -- undefined reference at link time otherwise */ diff --git a/src/scheduler/testsuite/test_sim_round_boundary_reconciliation.c b/src/scheduler/testsuite/test_sim_round_boundary_reconciliation.c index f63fcdf9..2ad1bf94 100644 --- a/src/scheduler/testsuite/test_sim_round_boundary_reconciliation.c +++ b/src/scheduler/testsuite/test_sim_round_boundary_reconciliation.c @@ -112,6 +112,9 @@ #include "../src/repl_info.c" #include "../src/repl_params.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/sim.c" #include "../src/sim_loop.c" #include "../src/sim_picker.c" /* bug-1567: sched_sim_driver_run() calls sim_bootstrap_picker() (sim_loop.c-cap sibling) as an extern -- undefined reference at link time otherwise */ diff --git a/src/scheduler/testsuite/test_sim_session_ordering.c b/src/scheduler/testsuite/test_sim_session_ordering.c index 635d7ab6..021f7873 100644 --- a/src/scheduler/testsuite/test_sim_session_ordering.c +++ b/src/scheduler/testsuite/test_sim_session_ordering.c @@ -134,6 +134,9 @@ #include "../src/core_session.c" #include "../src/decision.c" #include "../src/driver.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/plugins/builtin_fcfs.c" #include "../src/recording.c" #include "../src/recording_events.c" diff --git a/src/scheduler/testsuite/test_snapshot_save_load.c b/src/scheduler/testsuite/test_snapshot_save_load.c index f6bdee25..200b4ba0 100644 --- a/src/scheduler/testsuite/test_snapshot_save_load.c +++ b/src/scheduler/testsuite/test_snapshot_save_load.c @@ -99,6 +99,9 @@ #include "../src/core_session.c" #include "../src/decision.c" #include "../src/resource.c" +/* Hooked sources compile SCHED_TRACE bodies (scheduler-sim-decision-trace). */ +#include "../src/sched_trace.c" +#include "../src/sched_trace_capture.c" #include "../src/snapshot.c" #include "../src/snapshot_load.c" #include "../src/snapshot_wire.c"