feat(ha-term-safety): restore controller build + wire vote/AE term wire fields (tasks 1.1, 1.2)

1.1: WalCatchupEntry gains term@4/prevLogIndex@5/prevLogTerm@6 (append-only).
1.2: RequestVote/PreVote gain lastLogTerm@4/lastLogIndex@5; cluster.c vote callers
fixed to the extended library arity (RESTORES xce_controller + controller_unit_test
compile+link, broken by the raft-commit-safety signature extension); ha.c emits the
candidate's last-log tuple on send.

5 minimal stub log/commit callbacks wired into s_real_cbs so raft_init's new
non-NULL requirement is satisfied — tasks 2.x replace them with real bodies; the
logOk freshness gate is inert until the term seam (1.3) + on_get_entry_term (2.2).

Pre-existing test_repl_unit.c wal_catchup -EAGAIN failures + ASAN leaks are an
overlayfs /tmp fsync env artifact (bug-850), not from this task (untouched paths;
append-only schema cannot affect the @3 entries-list decode). Build/baseline
isolation is blocked by a c-capnproto flake-hash drift — see Implementation Notes.
This commit is contained in:
Rongsong Shen 2026-06-22 03:41:49 +00:00
parent e8e41752c0
commit 004a40bb3b
9 changed files with 264 additions and 9 deletions

View file

@ -179,6 +179,11 @@ typedef struct {
char *candidate_id;
uint64_t config_tag;
uint64_t last_log_lsn;
/* Raft (lastLogTerm, lastLogIndex) freshness tuple (ha-term-safety task 1.2):
* feeds the library logOk gate, distinct from config_tag/last_log_lsn which
* drive the application freshness gate. last_log_index == candidate log_len. */
uint64_t last_log_term;
uint64_t last_log_index;
} request_vote_req_t;
typedef struct {
@ -348,6 +353,13 @@ struct wal_catchup_entry {
* capn_free(); malloc'd, owned, freed by xce_free_request(). */
uint8_t *raw_payload;
size_t raw_payload_len;
/* Raft AppendEntries term fields (ha-term-safety task 1.1, Req 1.3/1.4).
* term == this entry's term stamp; prev_log_index == lsn-1; prev_log_term ==
* term of the entry at prev_log_index (0 if absent). Consumed by the log
* callbacks (tasks 2.x) for the AppendEntries logOk / truncation decision. */
uint64_t term;
uint64_t prev_log_index;
uint64_t prev_log_term;
};
/* ── Persistence Cap'n Proto mapped types (P0-9) ─────────────────────