feat(ha-config-bootstrap): implement dispatch gate (task 3.3)
- errnox.h: add E_XCE_NOT_READY and E_XCE_STANDBY error codes with extern int XCE_ERR_NOT_READY / XCE_ERR_STANDBY runtime variables - ha.h: declare ha_dispatch_gate(ha_state_t *, int opcode) - ha.c: define XCE_ERR_* variables; initialize heartbeat_seen semaphore and primary_ctrl_fd = -1 in ha_init(); sem_destroy in ha_fini(); implement ha_dispatch_gate() with allowlist for CTRL_INIT/CTRL_ELECTING (only OP_requestVote and OP_probeConfigTag pass) and CTRL_STANDBY (replication, election, and housekeeping ops pass; primary-only ops return -XCE_ERR_STANDBY) - cluster.c: wire ha_dispatch_gate() in myreq_handler() before opcode switch; gate failure sends error reply and returns early All 393 unit tests pass. Satisfies requirements 1.3 and 1.4.
This commit is contained in:
parent
6272fc8eb2
commit
72776f18ff
5 changed files with 106 additions and 1 deletions
|
|
@ -277,6 +277,17 @@ void start_heartbeat_listener(cluster_t *c);
|
|||
*/
|
||||
void stop_heartbeat_listener(cluster_t *c);
|
||||
|
||||
/*
|
||||
* ha_dispatch_gate: role-based operation filter for the vtaskmgr dispatch loop.
|
||||
* Returns:
|
||||
* 0 — operation is permitted for the current role
|
||||
* -E_XCE_NOT_READY — role is CTRL_INIT or CTRL_ELECTING and opcode is not
|
||||
* OP_requestVote or OP_probeConfigTag
|
||||
* -E_XCE_STANDBY — role is CTRL_STANDBY and opcode is a primary-only op
|
||||
* CTRL_PRIMARY always returns 0.
|
||||
*/
|
||||
int ha_dispatch_gate(ha_state_t *ha, int opcode);
|
||||
|
||||
/* ── HA Config Bootstrap & Term Durability (ha-config-bootstrap spec) ── */
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue