forked from lei.chen/myxce
fix(ha): fix config replication to standbys; add replConfigPush handler
- config_repl.c: add handle_repl_config_push — standby handler for OPCode_replConfigPush. Verifies SHA-256, saves blob to disk via conf_save_config, reloads via load_primary_config, ACKs primary. - config_repl.h: declare handle_repl_config_push. - cluster.c: dispatch OPCode_replConfigPush to handle_repl_config_push; populate c->myhost_info.name from myconf->name (ctrl-1/ctrl-2/ctrl-3) instead of the static "controller" placeholder. - ha.c: fix raft_cb_become_leader push_config_to_standbys call to pass real config bytes and tag read from disk (was NULL/0 — standbys got empty push and never saved config). - typemap.h: add raw_sha256/raw_bytes/raw_bytes_len fields to repl_config_push_req_t (mirrors upgrade_config_req_t pattern). - request.c: pre-extract List(UInt8) sha256/bytes from OPCode_replConfigPush before capn_free() in xce_decode(); free them in xce_free_request(). - helper.c: add all HA/replication opcode names to xce_request_op_name so "unknown opcode 30" becomes "replConfigPush" in logs. - cluster_def.h: add embedded myhost_info field to cluster_t struct. - ha.h: declare ha_start_primary_heartbeat; remove dead ha_find_and_connect_to_primary declaration.
This commit is contained in:
parent
d00d3bb051
commit
3d076ccda6
8 changed files with 191 additions and 8 deletions
|
|
@ -337,9 +337,14 @@ struct repl_config_reply_s {
|
|||
};
|
||||
|
||||
struct repl_config_push_req_s {
|
||||
uint64_t version_tag; /* version tag of the pushed config */
|
||||
xce_data_t *sha256; /* 32-byte SHA-256 */
|
||||
xce_data_t *bytes; /* serialised ClusterConfig blob */
|
||||
uint64_t version_tag; /* version tag of the pushed config */
|
||||
xce_data_t *sha256; /* 32-byte SHA-256 (decoded, not usable as raw bytes) */
|
||||
xce_data_t *bytes; /* serialised ClusterConfig blob (decoded, not usable) */
|
||||
/* Pre-extracted raw fields populated by xce_decode() before capn_free(),
|
||||
* mirroring the same pattern as upgrade_config_req_t. Owned by the struct. */
|
||||
uint8_t *raw_sha256; /* 32-byte SHA-256, malloc'd, or NULL */
|
||||
uint8_t *raw_bytes; /* serialised ClusterConfig blob, malloc'd, or NULL */
|
||||
size_t raw_bytes_len; /* length of raw_bytes */
|
||||
};
|
||||
|
||||
struct repl_config_push_reply_s {
|
||||
|
|
|
|||
|
|
@ -96,7 +96,8 @@ typedef struct {
|
|||
|
||||
typedef struct cluster_s {
|
||||
myconf_t* myconf;
|
||||
xce_peerinfo_t* myhost;
|
||||
xce_peerinfo_t* myhost; /* points at myhost_info once initialised */
|
||||
xce_peerinfo_t myhost_info; /* storage; name set from myconf->name */
|
||||
hooksys_t hooksys;
|
||||
iomgr_t iomgr;
|
||||
zarray_t endpoints;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue