d937c1c1bb
feat(ha-heartbeat-liveness): role-based liveness reset in opcode dispatch (task 3.1)
...
Replace fd-based guard in OPCode_nop with role==CTRL_STANDBY check.
Add ha_on_heartbeat_received call to OPCode_hello ctrlhello path when standby.
Satisfies Req 1.3 (any message resets deadline) and Req 4.1 (ctrlhello counts).
3 new dispatch guard tests added to test_ha_liveness.c.
2026-06-01 15:31:15 +00:00
622302a55c
feat(ha-heartbeat-liveness): idle-triggered primary NOP per standby (task 2.2)
...
Extend primary_heartbeat_fn to read last_push_time per standby and send NOP
only when elapsed >= heartbeat_interval_s. on_standby_connected writes
last_push_time before ctrlhello send. Remove workaround xce_nop_req at end
of on_standby_connected. Add ha_nop_req_hook XCE_TESTING seam. 3 new tests.
2026-06-01 15:05:41 +00:00
738859fb4e
feat(ha-heartbeat-liveness): replace hb_timeout_thread with liveness_poll_fn (task 2.1)
...
Remove hb_vtask_t, hb_timeout_thread, s_hb_vtask from ha.c. Replace with
liveness_poll_ctx_t + delaymgr liveness_poll_fn: checks cancelled flag and
role==CTRL_STANDBY before acting; re-arms at heartbeat_interval_ms/2.
ha_on_primary_ctrl_fd_rdhup calls ha_disarm_heartbeat_timeout_vtask first
to prevent duplicate failover (Req 5.4). ha_on_heartbeat_received writes
last_activity via clock_gettime. Add test_ha_liveness.c with 7 unit tests.
2026-06-01 14:34:14 +00:00
9f9a6b3c0f
feat(ha-heartbeat-liveness): add validate_heartbeat_config startup check (task 1.2)
...
Enforce heartbeat_timeout_ms >= 2 * heartbeat_interval_ms at startup.
validate_heartbeat_config() in startup_validation.c returns -EINVAL with
error message on violation; wired in cluster_init_phase1 before ha_init().
4 unit tests added to test_ha_startup.c.
2026-06-01 12:26:29 +00:00
bcb45e59d2
feat(ha-heartbeat-liveness): add last_activity and last_push_time state fields (task 1.1)
...
Add time_t last_activity to ha_state_t for standby liveness timestamp tracking.
Add time_t last_push_time to standby_ep_ctx_t for primary idle NOP suppression.
Zero-initialize last_activity in ha_init(); last_push_time zeroed by calloc.
Add test_ha_init_last_activity_is_zero to test_ha_startup.c.
2026-06-01 11:59:16 +00:00
e85100d761
test(ha-peer-connection-reuse): complete tasks 7.1, 7.2, 7.3 — all validation done
...
Task 7.1 (unit tests) was already complete with 8 tests in
test_ha_connection_reuse.c. Added two new tests:
Task 7.2 — test_follower_passive_no_outbound_connect (Req 2.1, 2.4):
Verifies raft_cb_become_follower sets role=CTRL_STANDBY and nulls all
votes[i].ep. The old fetch_config_from_primary path is gone; standbys
never initiate outbound connects after election loss.
Task 7.3 — test_promoted_ep_repl_ack_promotes_to_primary (Req 5.2, 5.4):
Injects two OPCode_replCatchUpDone packets via peer_ctrl_msg_handler in
CTRL_PRIMARY_COMMITTING with n_peers=4 (5-node cluster, quorum=2 ACKs).
Verifies repl_ack_count reaches 2 and role transitions to CTRL_PRIMARY.
Added vote_ep_ctx_set_cluster_for_test() seam so vctx->c is non-NULL
when ha_repl_ack_received fires ha_promote_to_primary.
All 62 controller tests pass; ASAN clean.
spec: .kiro/specs/ha-peer-connection-reuse/tasks.md all tasks [x]
2026-06-01 07:53:02 +00:00
937605ec60
feat(raft-library): tasks 6.4 + 7 complete — all ASAN-clean, hooks verified, spec closed
2026-05-31 09:25:20 +00:00
fd9933c9d0
feat(raft-library): task 6.3 — delegate election dispatch to raft_* API in ha.c + cluster.c
2026-05-31 08:43:01 +00:00
8f0d2d55c3
feat(raft-library): task 6.2 — real raft callbacks in ha.c; fix double-free + dead stubs
2026-05-31 07:53:00 +00:00
b77525deb0
feat(raft-library): task 6.1 — raft_state_t field in ha_state_t, raft_init with no-op stubs
2026-05-31 07:20:15 +00:00
6bdf7edacf
feat(raft-library): task 5.4 — Groups F+G, 6 test cases (RDHUP failover + split-brain)
2026-05-31 07:05:45 +00:00
5c677bc52d
feat(raft-library): task 5.3 — Groups D+E 7 test cases; fix Req 6.3 on_cancel_timeout in decided path
2026-05-31 06:58:02 +00:00
0aa4c84bfe
feat(raft-library): task 5.2 — protocol Groups C+H, 11 test cases (eligible policy + persist)
2026-05-31 06:34:33 +00:00
389047194f
feat(raft-library): task 5.1 — protocol Groups A+B, 10 test cases (election + voted_for)
2026-05-31 06:26:52 +00:00
c1b07392df
feat(raft-library): task 4.2 — sim deliver/partition/timeout/start-all; 4 tests
2026-05-31 06:20:35 +00:00
d2e2c1ef8a
feat(raft-library): task 4.1 — sim data structures, raft_sim_init, dump_log; 2 tests
2026-05-31 06:11:34 +00:00
85a7e325a8
feat(raft-library): task 3.5 — election timeout, leader-lost, check-and-start; 6 tests
2026-05-31 06:02:29 +00:00
f81054930f
feat(raft-library): task 3.4 — raft_on_vote_reply quorum tracking; 6 tests + review fixes
2026-05-31 05:56:34 +00:00
e0bcb35554
feat(raft-library): task 3.3 — raft_on_vote_request 6-step decision; 10 tests
2026-05-31 05:44:34 +00:00
4955fa3805
feat(raft-library): task 3.2 — raft_start_election with single-node shortcircuit; 4 tests
2026-05-31 05:30:00 +00:00
1aa7db4583
feat(raft-library): task 3.1 — raft_init validation, state init, raft_snapshot; 12 tests
2026-05-31 05:18:42 +00:00
d109155a21
feat(raft-library): task 2.2 — raft_callbacks_t, raft_config_t, public API signatures
2026-05-31 05:03:04 +00:00
66c9810823
feat(raft-library): task 2.1 — raft_role_t, raft_state_t, raft_snapshot_t in raft.h
2026-05-31 04:56:49 +00:00
7f7de013b9
feat(raft-library): task 1.1 — build scaffold (raft/ files + meson wiring)
2026-05-31 04:51:42 +00:00
e875cae7ad
chore(election-iomgr-refactor): mark tasks 6.1 and 6.2 complete in tasks.md
2026-05-30 13:46:17 +00:00
27ea14cd9a
feat(election-iomgr-refactor): remove old blocking election code (am_i_primary_quorum, vote_request_thread, bootstrap_config_if_needed) — task 5.3
2026-05-30 13:04:19 +00:00
2e5681387a
feat(election-iomgr-refactor): restructure myapp_run to fully non-blocking async startup — task 5.1
2026-05-30 12:26:56 +00:00
f4a6726f1b
feat(election-iomgr-refactor): COMMITTING path in ha_elect_evaluate_and_signal + committing/election timeout watchdogs — tasks 4.1, 4.3, 4.4
2026-05-30 11:37:12 +00:00
e6135ea828
feat(election-iomgr-refactor): extend ha_dispatch_gate for CTRL_PRIMARY_COMMITTING — task 3.1
2026-05-30 10:28:36 +00:00
b8e6404fe2
docs(ha-bootstrap): fix config tag length: 12 hex chars (6 bytes), not 16
2026-05-29 13:27:01 +00:00
96df7285da
docs(ha-config-bootstrap): add path verification warning — config must be in workdir/myname/conf/
2026-05-29 11:11:29 +00:00
25c71adffb
docs(ha-config-bootstrap): Test 11.1 now covers config replication verification
2026-05-29 11:02:45 +00:00
bc2aaff089
docs(ha-config-bootstrap): only primary needs initial config — standbys get it via replication
2026-05-29 10:59:51 +00:00
f465af0c0c
docs(ha-config-bootstrap): add initial cluster config installation steps
2026-05-29 10:57:09 +00:00
bb4e23663a
docs(ha-config-bootstrap): update manual tests to 3-node cluster (odd peer count design requirement)
2026-05-29 10:41:11 +00:00
abdb195c8e
docs(ha-config-bootstrap): add TLS cert setup instructions to manual test guide
2026-05-29 10:34:41 +00:00
e88c7bebe9
docs(ha-config-bootstrap): add manual integration test guide with correct worktree paths
2026-05-29 10:20:03 +00:00
0d5f2cb1bb
feat(ha-config-bootstrap): implement EPOLLRDHUP failover and heartbeat timeout vtask (task 9.4)
2026-05-29 07:17:55 +00:00
9bbff7b016
claude skills
2026-05-29 15:00:06 +08:00
94bf5d94b8
feat(ha-config-bootstrap): implement OP_ctrlHello state sync handler (task 9.3)
2026-05-29 05:22:17 +00:00
0ec0ffa7e3
feat(ha-config-bootstrap): implement xce_retry_config_t and xce_request_with_retry (tasks 10.1, 10.2)
2026-05-29 03:00:34 +00:00
bb8e531a12
test(ha-config-bootstrap): add RED-phase tests for xce_request_with_retry (task 10.1)
2026-05-29 02:45:24 +00:00
97a76617e6
feat(ha-config-bootstrap): implement ha_find_and_connect_to_primary three-tier discovery (task 9.2)
2026-05-28 15:09:08 +00:00
3252c89e7a
docs(ha-config-bootstrap): mark task 9.1 complete — apply_wal_entry already extracted
2026-05-28 14:53:52 +00:00
c0cfc1cf83
feat(ha-config-bootstrap): implement committed_config_tag and config quorum commit (task 8.1)
2026-05-28 14:52:29 +00:00
684d3b6608
feat(ha-config-bootstrap): wire repl_wait_majority_ack into persist_wal_sync_append (task 7.6)
2026-05-28 14:28:38 +00:00
85c8565957
feat(ha-config-bootstrap): implement persist_truncate_wal_above and committed_lsn (task 7.5)
2026-05-28 14:13:29 +00:00
e7da075315
test(ha-config-bootstrap): add RED-phase tests for persist_truncate_wal_above (task 7.4)
2026-05-28 14:00:54 +00:00
30bcb74a67
feat(ha-config-bootstrap): implement repl_wait_majority_ack with quorum formula and ack_op discrimination (task 7.3)
2026-05-28 13:57:24 +00:00
3969064e11
feat(ha-config-bootstrap): implement repl_broadcast eviction and pending_ack_count (task 7.2)
2026-05-28 13:44:11 +00:00