fix(ha-bootstrap): wire OP_requestVote RPC through standard Request envelope
The vote_request_thread was sending raw capnp(RequestVoteRequest) bytes but the server-side iomgr decodes every incoming packet as a Request struct. This caused the term field (uint64) to be misread as the opcode field (uint16), so vote RPCs were silently misrouted (term=1 → OPCode_reply, term=2 → OPCode_hello) and no node ever got a vote from its peers. Fix: - controller.capnp: add requestvotemsg @27 to Request.body and requestvotereplymsg @14 to RequestReply.data - typemap.h: move request_vote_req_t/reply_t before xce_request_t; add requestvotemsg/requestvotereplymsg to body/data unions - ha.c: rewrite vote_request_thread send/recv to use xce_encode() wrapper and decode outer Request→inner RequestReply on receive - cluster.c: add case OPCode_requestVote handler calling handle_request_vote() and replying via xce_reply() All 188 unit tests pass.
This commit is contained in:
parent
e25d2cc645
commit
6753b364c8
4 changed files with 100 additions and 58 deletions
|
|
@ -558,6 +558,7 @@ struct RequestReply $C.mapname("xce_reply_t"){
|
|||
replconfigpushreplymsg @9: ReplConfigPushReply;
|
||||
upgradeconfigreplymsg @10: UpgradeConfigReply;
|
||||
ctrlhelloreplymsg @13: CtrlHelloReply;
|
||||
requestvotereplymsg @14: RequestVoteReply;
|
||||
}
|
||||
|
||||
redirectHost @11: Text $C.mapname("redirect_host");
|
||||
|
|
@ -623,6 +624,7 @@ struct Request $C.mapname("xce_request_t"){
|
|||
upgradeconfigrequestmsg @24: UpgradeConfigRequest;
|
||||
heartbeatmsg @25: HeartbeatMsg;
|
||||
ctrlhellomsg @26: CtrlHelloRequest;
|
||||
requestvotemsg @27: RequestVoteRequest;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue