test(worker-rejoin-resync): task 7.1 - full rejoin round trip
Add test_full_rejoin_reconciliation_round_trip proving the whole chain composes end-to-end in one round, for a mix of still-running, finished-success, finished-failure, and unrecognized jobs: real rejoin_worker() -> worker_send_resync_query() (real wire query) -> hand-built worker answer through the real report codec -> resync_handle_report_page() -> resync_apply_report(), asserting correct final state and scheduler notification for each. Test-only, no production changes. Logs bug-1754: a worker-reported job failure's exit code is never durably recorded anywhere in this codebase (distinct from bug-1747's finish-time gap) - discovered honestly asserted by the new test, out of scope for this validation-only task. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4M5MJM2zK6nU43da267Ku
This commit is contained in:
parent
9f655c61c7
commit
8650cfd9ba
3 changed files with 601 additions and 1 deletions
|
|
@ -20554,6 +20554,32 @@
|
|||
],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-09-01T20:30:00Z"
|
||||
},
|
||||
{
|
||||
"id": "bug-1754",
|
||||
"timestamp": "2026-09-01T13:00:00Z",
|
||||
"error_message": "Discovered while building worker-rejoin-resync task 7.1's full round-trip integration test (test_full_rejoin_reconciliation_round_trip, test_worker_resync.c): a worker-reported exit code for a finished-FAILURE outcome is never durably recorded by ANY existing path in this codebase, reconciliation or ordinary. record_job_fail_fact()'s WAL_JOB_FAIL payload (job.c, persist_submit_job_fact_ex(..., WAL_JOB_FAIL, jobid, 0, WAL_JOB_FAIL_STAGE_FLAG|stage)) carries no exit-code slot at all, and apply_job_fail_transition() (job.c:2831-2853) never touches job.job.exit_info for the FAIL path -- it stays NULL unconditionally for every job failure. The new round-trip test asserts this honestly (TEST_ASSERT_NULL on job.job.exit_info with an inline comment) rather than encoding a wrong 'correct' expectation.",
|
||||
"file": "src/controller/job.c",
|
||||
"root_cause": "Distinct from and broader than bug-1747 (which documents only the FAIL finish-time mistiming, via time(NULL) instead of a worker-reported value). This gap is about the exit CODE, not the finish TIME: WAL_JOB_FAIL's wire payload was never given a code slot in the first place, so no caller of record_job_fail_fact()/on_job_fail() -- worker-reported or otherwise -- has ever been able to persist or apply a job's actual failure exit code. Systemic and pre-existing; unrelated to worker-rejoin-resync's own changes, which only exercise (and correctly do not attempt to fix) this existing gap.",
|
||||
"fix": "NOT FIXED -- out of scope for worker-rejoin-resync (a test-only validation task, task 7.1, correctly declined to patch a production defect it incidentally surfaced). Recommend a dedicated future task: extend WAL_JOB_FAIL's wire payload with an exit-code field (mirroring bug-1747's eventual FAIL-side fix for finish-time, if/when that lands) and have apply_job_fail_transition() populate job.job.exit_info from it. Until then, job.job.exit_info is NULL after any job failure, worker-rejoin-resync reconciliation included -- callers/UIs must not assume this field is populated for a failed job.",
|
||||
"tags": [
|
||||
"worker-rejoin-resync",
|
||||
"task-7.1",
|
||||
"job-c",
|
||||
"record_job_fail_fact",
|
||||
"apply_job_fail_transition",
|
||||
"exit_info",
|
||||
"exit_code",
|
||||
"wal_job_fail",
|
||||
"requirement-4",
|
||||
"discovered-not-fixed",
|
||||
"systemic"
|
||||
],
|
||||
"related_bugs": [
|
||||
"bug-1747"
|
||||
],
|
||||
"occurrences": 1,
|
||||
"last_seen": "2026-09-01T13:00:00Z"
|
||||
}
|
||||
]
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue