forked from lei.chen/myxce
feat(ha-config-bootstrap): implement ha_find_and_connect_to_primary three-tier discovery (task 9.2)
This commit is contained in:
parent
3252c89e7a
commit
97a76617e6
6 changed files with 428 additions and 1 deletions
|
|
@ -411,6 +411,31 @@ int xce_probe_config_tag(const char *host, uint16_t port, uint64_t *tag_out);
|
|||
*/
|
||||
ctrl_role_t ha_wait_for_heartbeat_or_timeout(ha_state_t *ha);
|
||||
|
||||
/* ── Task 9.2: Persistent Control Channel (Req 6.1) ───────────────────────── */
|
||||
|
||||
/*
|
||||
* ha_find_and_connect_to_primary: three-tier primary discovery and raw TCP connect.
|
||||
*
|
||||
* Tier 1: ha->voted_for_name non-empty → direct connect to that candidate.
|
||||
* Backoff HA_FIND_PRIMARY_T1_BACKOFF_MS; retry HA_FIND_PRIMARY_T1_MAX_RETRIES.
|
||||
* Tier 2: probe remaining candidates; follow XCE_ERR_STANDBY redirect.
|
||||
* Tier 3: blind scan with 100ms→5s exponential backoff (no exit until success).
|
||||
*
|
||||
* On success: sets ha->primary_ctrl_fd; when c != NULL, registers fd with
|
||||
* c->iomgr.epoll_fd for EPOLLIN|EPOLLRDHUP. Returns fd >= 0.
|
||||
* Pass c == NULL to skip iomgr registration (unit test mode).
|
||||
* Requirements: 6.1
|
||||
*/
|
||||
int ha_find_and_connect_to_primary(ha_state_t *ha,
|
||||
const ha_config_t *cfg,
|
||||
const xce_cluster_config_t *peers,
|
||||
cluster_t *c);
|
||||
|
||||
#define HA_FIND_PRIMARY_T1_MAX_RETRIES 3
|
||||
#define HA_FIND_PRIMARY_T1_BACKOFF_MS 200
|
||||
#define HA_FIND_PRIMARY_T3_INIT_MS 100
|
||||
#define HA_FIND_PRIMARY_T3_MAX_MS 5000
|
||||
|
||||
/* ── P3-6: Test-only failover shim ────────────────────────────── */
|
||||
|
||||
#ifdef XCE_TESTING
|
||||
|
|
@ -420,6 +445,13 @@ ctrl_role_t ha_wait_for_heartbeat_or_timeout(ha_state_t *ha);
|
|||
* and term monotonicity. See design doc P3-6 and src/docs/persistence-and-ha-design.md.
|
||||
*/
|
||||
uint64_t ha_trigger_manual_failover_for_test(ha_state_t *ha);
|
||||
|
||||
/*
|
||||
* ha_tcp_connect_hook: test-only seam for TCP connections.
|
||||
* When non-NULL, ha_find_and_connect_to_primary() calls this instead of
|
||||
* the real connect() path. Returns connected fd on success, -errno on failure.
|
||||
*/
|
||||
extern int (*ha_tcp_connect_hook)(const char *host, int port);
|
||||
#endif
|
||||
|
||||
#endif /* HA_H */
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue