feat(worker-rejoin-resync): task 6.2 - route job-state report to reconciliation
Add OPCode_jobStateReport dispatch in myreq_handler, reassembling a report across multiple incoming pages before handing it to task 3.2's resync_apply_report() exactly once - proven via a test-only call counter, not just end-state equivalence (a double-apply could pass an end-state check if idempotent). Standby-redirect investigation (Req 8.1/8.3): confirmed ha_dispatch_gate already redirects every rejected opcode uniformly, so no opcode-specific code was needed for that. OPCode_jobStateQuery has no controller-side receive path at all (only sent, never received) so needed no gate change either. That same investigation found a different, more consequential gap: fixes bug-1753, ha_dispatch_gate's quorum-loss fact-admission allowlist (OPCode_notify/update/setpreason/clrpreason) was missing OPCode_jobStateReport, so a report arriving during a transient quorum-loss window - this feature's own core failover scenario - would be rejected outright with no retry (worker sends fire-and-forget). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4M5MJM2zK6nU43da267Ku
This commit is contained in:
parent
a3d12d37d9
commit
9f655c61c7
12 changed files with 1178 additions and 12 deletions
|
|
@ -309,6 +309,17 @@ typedef struct {
|
|||
resync_state_t* resync; /* worker-rejoin-resync: NULL unless a job-state
|
||||
* reconciliation round is currently outstanding
|
||||
* for this worker */
|
||||
/* worker-rejoin-resync task 6.2 (Req 8.1, 8.3): opaque (void*) rather
|
||||
* than a typed pointer here because its real type, resync_report_
|
||||
* accum_t (resync.h), embeds xce_job_state_entry_t -- defined in
|
||||
* typemap.h, which itself includes THIS header (xce/types.h), so
|
||||
* typemap.h cannot be included from here without a cycle. NULL unless
|
||||
* an OPCode_jobStateReport is currently being reassembled across
|
||||
* multiple pages for this worker; owned and cast back to resync_
|
||||
* report_accum_t* exclusively by resync.c, under this worker's own
|
||||
* RTTI lock, mirroring how `resync` above is the only other opaque-
|
||||
* from-here, resync.c-owned worker_t field. */
|
||||
void* report_accum;
|
||||
} worker_t;
|
||||
|
||||
typedef struct {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue