feat(ha-single-leader-role): delete dispatch-gate COMMITTING branch + collapse role predicates to PRIMARY (task 4.2)
This commit is contained in:
parent
a5bf86112a
commit
71ce41f486
3 changed files with 35 additions and 54 deletions
|
|
@ -3,7 +3,7 @@
|
|||
*
|
||||
* Tests verify (Req 6.1, 6.2, 6.4):
|
||||
* Req 6.1: CTRL_PRIMARY → deny all vote requests (return 0)
|
||||
* Req 6.1: CTRL_PRIMARY_COMMITTING → deny all vote requests (return 0)
|
||||
* Req 6.1: CTRL_PRIMARY + fresher same-term challenger → still deny (return 0)
|
||||
* Req 6.2: CTRL_STANDBY + fresh heartbeat → deny (return 0)
|
||||
* Req 6.4: CTRL_STANDBY + stale heartbeat → evaluate Raft gates (not denied by role gate)
|
||||
* Req 6.4: CTRL_ELECTING → evaluate Raft gates (not denied by role gate)
|
||||
|
|
@ -88,16 +88,18 @@ static void test_primary_role_denies_vote_request(void)
|
|||
printf("test_primary_role_denies_vote_request: PASS\n");
|
||||
}
|
||||
|
||||
/* ── Req 6.1: CTRL_PRIMARY_COMMITTING → deny ────────────────────────────── */
|
||||
/* ── Req 6.1: CTRL_PRIMARY denies a fresher same-term challenger ─────────── */
|
||||
|
||||
static void test_primary_committing_role_denies_vote_request(void)
|
||||
static void test_primary_role_denies_fresher_same_term_challenger(void)
|
||||
{
|
||||
/* When the receiving node is CTRL_PRIMARY_COMMITTING (waiting for quorum
|
||||
* replication ack before opening traffic), it must also deny all vote
|
||||
* requests. A challenger must not displace a committing primary. */
|
||||
/* The vote-deny contract that a transitional COMMITTING role used to carry
|
||||
* now lives entirely on CTRL_PRIMARY (single leader role). An elected
|
||||
* primary must deny a same-term challenger even when the challenger looks
|
||||
* FRESHER (higher config_tag / LSN): the role gate fires before any
|
||||
* freshness evaluation, protecting the live primary from displacement. */
|
||||
ha_state_t ha;
|
||||
ha_init(&ha, &g_gate_cfg, 0);
|
||||
atomic_store_explicit(&ha.role, (int32_t)CTRL_PRIMARY_COMMITTING,
|
||||
atomic_store_explicit(&ha.role, (int32_t)CTRL_PRIMARY,
|
||||
memory_order_release);
|
||||
atomic_store_explicit(&ha.term, 3ULL, memory_order_release);
|
||||
ha.voted_for_term = 0;
|
||||
|
|
@ -105,17 +107,17 @@ static void test_primary_committing_role_denies_vote_request(void)
|
|||
int granted = handle_request_vote(&ha,
|
||||
3ULL, /* same term */
|
||||
"ctrl-c",
|
||||
200ULL, /* candidate is fresh */
|
||||
200ULL, /* candidate is fresher */
|
||||
100ULL,
|
||||
100ULL, /* my config_tag */
|
||||
50ULL,
|
||||
0);
|
||||
|
||||
TEST_ASSERT_EQUAL_INT_MESSAGE(0, granted,
|
||||
"CTRL_PRIMARY_COMMITTING must deny all vote requests (Req 6.1)");
|
||||
"CTRL_PRIMARY must deny a fresher same-term challenger (Req 6.1)");
|
||||
|
||||
ha_fini(&ha);
|
||||
printf("test_primary_committing_role_denies_vote_request: PASS\n");
|
||||
printf("test_primary_role_denies_fresher_same_term_challenger: PASS\n");
|
||||
}
|
||||
|
||||
/* ── Req 6.2: CTRL_STANDBY + fresh heartbeat → deny ────────────────────── */
|
||||
|
|
@ -234,8 +236,8 @@ void test_ha_vote_gate(void)
|
|||
/* Req 6.1 — PRIMARY denies */
|
||||
RUN_TEST(test_primary_role_denies_vote_request);
|
||||
|
||||
/* Req 6.1 — PRIMARY_COMMITTING denies */
|
||||
RUN_TEST(test_primary_committing_role_denies_vote_request);
|
||||
/* Req 6.1 — PRIMARY denies a fresher same-term challenger */
|
||||
RUN_TEST(test_primary_role_denies_fresher_same_term_challenger);
|
||||
|
||||
/* Req 6.2 — STANDBY + fresh heartbeat denies */
|
||||
RUN_TEST(test_standby_fresh_heartbeat_denies_vote_request);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue