--- id: "bug-1481" status: "fixed" status_updated: "2026-09-24" status_note: "" component: "controller" severity: "unknown" timestamp: "2026-07-29T07:05:00Z" last_seen: "2026-09-19T09:00:00Z" occurrences: 1 files: ["src/controller/ha.c (vote_ep_err_handler", "~7564-7608; correct sibling sites at ~693-726 and ~830-855)"] tags: ["ha.c", "vote_ep_err_handler", "handle_request_vote_reply", "vote_reply_dispatch", "pre_vote_reply_dispatch", "silent-drop-on-reject", "same-family-as-bug-1423", "raft-adapter-conformance", "found-not-yet-fixed", "election-timeout-bounded", "not-a-deadlock"] related: ["bug-1423"] fix_commits: ["fce73b5b"] legacy: true --- # bug-1481: raft-adapter-conformance systematic audit finding (not yet fixed): vote_ep_err_handler… ## Description raft-adapter-conformance systematic audit finding (not yet fixed): vote_ep_err_handler (ha.c:7564-7608), the shared on_err handler wired onto both real-vote and PreVote endpoints (ha.c:688-689, 827-828), handles post-connect endpoint failures (RDHUP/SSL error/remote close arriving after connect+monitor succeeded but before a reply) by calling the legacy handle_request_vote_reply directly instead of routing through vote_reply_dispatch / pre_vote_reply_dispatch (the production tally path fixed by bug-1423/1424 for connect-time and monitor-time failures only). ## Environment _Not recorded (migrated from buglog.json)._ ## Reproduction _Not recorded (migrated from buglog.json)._ ## Root cause Reopens the bug-1423/1424 defect class (vote-request send failure must reach the reply tally) for one failure window the original fix did not cover: connect/iomgr_monitor failures were fixed, but a failure arriving after a successful connect+monitor (before any reply) still bypasses the tally via the legacy path. Effect is bounded (election_timeout_ms / PreVote round timeout still fire), not a permanent deadlock, but the fast all-replied quorum-decision path is structurally unreachable for this failure mode. ## Fix FIXED (2026-07-29, ~13:53, commit fce73b5b "feat(raft-adapter-conformance): route post-connect vote/PreVote failures to production tally"). vote_ep_err_handler split into a real-vote handler and a new pre_vote_ep_err_handler; each now routes a post-connect election-phase failure through the same production tally path used for connect-time failures (vote_reply_dispatch / pre_vote_reply_dispatch) instead of the legacy handle_request_vote_reply. Landed as raft-adapter-conformance tasks 3.1-3.2 (see tasks.md), tested in test_ha_vote_send.c, confirmed live in task 7.4's soak. This buglog entry's original 'Not yet fixed' note (07:05 same day) predates the fix landing by ~6.8h and was never updated -- code is fixed, only this log entry was stale. ## Verification _Not recorded (migrated from buglog.json)._ ## References - Related: bug-1423