feat(worker-rejoin-resync): add worker reconciling status type (task 1.2)
Add XCE_WORKER_RECONCILING status bit (0x00800000, next in the existing sequential bitmask) + IS_WORKER_RECONCILING macro mirroring IS_WORKER_UNAVAIL's shape, and resync_state_t (round_token, queried_jobids array+count, deadline) referenced via a nullable worker_t.resync pointer -- NULL when no reconciliation round is outstanding. Compiles and is reachable, unused by any caller yet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Y4M5MJM2zK6nU43da267Ku
This commit is contained in:
parent
1ff57ef66e
commit
1260d9134b
2 changed files with 28 additions and 6 deletions
|
|
@ -7,7 +7,7 @@
|
||||||
- Observable completion: the schema builds cleanly and the new message/opcode/config-field definitions are visible in the generated bindings
|
- Observable completion: the schema builds cleanly and the new message/opcode/config-field definitions are visible in the generated bindings
|
||||||
- _Requirements: 2.1, 2.2, 3.5, 3.7, 5.3, 8.1, 8.2, 8.3_
|
- _Requirements: 2.1, 2.2, 3.5, 3.7, 5.3, 8.1, 8.2, 8.3_
|
||||||
|
|
||||||
- [ ] 1.2 (P) Add a worker reconciling status and round-tracking state
|
- [x] 1.2 (P) Add a worker reconciling status and round-tracking state
|
||||||
- Add a new worker status value meaning "job-state reconciliation outstanding for this host"
|
- Add a new worker status value meaning "job-state reconciliation outstanding for this host"
|
||||||
- Add a per-worker reconciliation-round structure capable of holding a round identifier, the set of queried job IDs, and a deadline
|
- Add a per-worker reconciliation-round structure capable of holding a round identifier, the set of queried job IDs, and a deadline
|
||||||
- Observable completion: the new status value and round structure compile and are reachable from the worker record, unused by any caller yet
|
- Observable completion: the new status value and round structure compile and are reachable from the worker record, unused by any caller yet
|
||||||
|
|
|
||||||
|
|
@ -174,6 +174,7 @@ typedef struct {
|
||||||
#define XCE_WORKER_CLOSED (0x00100000)
|
#define XCE_WORKER_CLOSED (0x00100000)
|
||||||
#define XCE_WORKER_HIDDEN (0x00200000) /* Admin explicitly removed — invisible but not yet cleaned up */
|
#define XCE_WORKER_HIDDEN (0x00200000) /* Admin explicitly removed — invisible but not yet cleaned up */
|
||||||
#define XCE_WORKER_CLOSED_BY_ADMIN (0x00400000) /* Admin closed — host closed explicitly by admin */
|
#define XCE_WORKER_CLOSED_BY_ADMIN (0x00400000) /* Admin closed — host closed explicitly by admin */
|
||||||
|
#define XCE_WORKER_RECONCILING (0x00800000) /* worker-rejoin-resync: job-state reconciliation outstanding for this host (Req 5.1) */
|
||||||
|
|
||||||
#define IS_WORKER_UNAVAIL(status) (((status) & XCE_WORKER_UNAVAIL) != 0)
|
#define IS_WORKER_UNAVAIL(status) (((status) & XCE_WORKER_UNAVAIL) != 0)
|
||||||
#define IS_WORKER_LOCKEDU(status) (((status) & XCE_WORKER_LOCKEDU) != 0)
|
#define IS_WORKER_LOCKEDU(status) (((status) & XCE_WORKER_LOCKEDU) != 0)
|
||||||
|
|
@ -182,6 +183,7 @@ typedef struct {
|
||||||
#define IS_WORKER_LOCKED(status) \
|
#define IS_WORKER_LOCKED(status) \
|
||||||
(IS_WORKER_LOCKEDU(status) || IS_WORKER_LOCKEDW(status))
|
(IS_WORKER_LOCKEDU(status) || IS_WORKER_LOCKEDW(status))
|
||||||
#define IS_WORKER_BUSY(status) (((status) & XCE_WORKER_BUSY) != 0)
|
#define IS_WORKER_BUSY(status) (((status) & XCE_WORKER_BUSY) != 0)
|
||||||
|
#define IS_WORKER_RECONCILING(status) (((status) & XCE_WORKER_RECONCILING) != 0)
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
char* hosttype;
|
char* hosttype;
|
||||||
|
|
@ -281,12 +283,32 @@ typedef struct {
|
||||||
double allocated;
|
double allocated;
|
||||||
} xce_res_account_t;
|
} xce_res_account_t;
|
||||||
|
|
||||||
|
/* worker-rejoin-resync: per-worker job-state reconciliation round. One
|
||||||
|
* resync_state_t per worker_t (worker_t.resync below), absent (NULL) when
|
||||||
|
* no reconciliation is currently outstanding for that worker. Purely
|
||||||
|
* in-memory bookkeeping, not itself persisted -- see design.md's Data
|
||||||
|
* Models / State Management for the full rationale. */
|
||||||
typedef struct {
|
typedef struct {
|
||||||
xce_worker_t host;
|
uint64_t round_token; /* discards stale/superseded reports (Req 6.3) */
|
||||||
char hostkey[XCE_MAXKEY_LEN];
|
int n_queried_jobids;
|
||||||
endpoint_t* ep;
|
uint64_t* queried_jobids; /* set semantics (membership-checked, not
|
||||||
int idx;
|
* positionally iterated): job IDs queried this
|
||||||
zarray_t usages;
|
* round; array+count, mirroring
|
||||||
|
* xce_job_state_query_t.jobids (typemap.h) */
|
||||||
|
uint64_t deadline; /* CLOCK_MONOTONIC ms deadline (Req 5.3); same
|
||||||
|
* representation as delaymgr_t.nextrun_ms
|
||||||
|
* (delay.h) */
|
||||||
|
} resync_state_t;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
xce_worker_t host;
|
||||||
|
char hostkey[XCE_MAXKEY_LEN];
|
||||||
|
endpoint_t* ep;
|
||||||
|
int idx;
|
||||||
|
zarray_t usages;
|
||||||
|
resync_state_t* resync; /* worker-rejoin-resync: NULL unless a job-state
|
||||||
|
* reconciliation round is currently outstanding
|
||||||
|
* for this worker */
|
||||||
} worker_t;
|
} worker_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue