From: Serge Petrenko <sergepetrenko@tarantool.org> To: kyukhin@tarantool.org, v.shpilevoy@tarantool.org Cc: tarantool-patches@dev.tarantool.org Subject: [Tarantool-patches] [PATCH] raft: fix an assertion failure on transition to voter Date: Thu, 22 Oct 2020 13:44:56 +0300 [thread overview] Message-ID: <20201022104456.51722-1-sergepetrenko@tarantool.org> (raw) When an instance is configured as candidate, it has a leader death timer ticking constantly to schedule an election as soon as leader disappears. When the instance receives the leader's heartbeat, it resets the timer to its initial value. When being a voter, the instance ignores heartbeats, since it has nothing to wait for. So its timer must be stopped. Otherwise it'll try to schedule a new election and fail. Stop the timer on transition from candidate to voter. --- https://github.com/tarantool/tarantool/tree/sp/raft-crash-on-voter src/box/raft.c | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/box/raft.c b/src/box/raft.c index b70f47006..4a8e54cac 100644 --- a/src/box/raft.c +++ b/src/box/raft.c @@ -952,12 +952,18 @@ raft_cfg_is_candidate(bool is_candidate) * until the new state is fully persisted. */ } - } else if (raft.state != RAFT_STATE_FOLLOWER) { - if (raft.state == RAFT_STATE_LEADER) - raft.leader = 0; - raft.state = RAFT_STATE_FOLLOWER; - /* State is visible and changed - broadcast. */ - raft_schedule_broadcast(); + } else { + if (raft.state != RAFT_STATE_LEADER) { + /* Do not wait for anything while being a voter. */ + ev_timer_stop(loop(), &raft.timer); + } + if (raft.state != RAFT_STATE_FOLLOWER) { + if (raft.state == RAFT_STATE_LEADER) + raft.leader = 0; + raft.state = RAFT_STATE_FOLLOWER; + /* State is visible and changed - broadcast. */ + raft_schedule_broadcast(); + } } box_update_ro_summary(); } -- 2.24.3 (Apple Git-128)
next reply other threads:[~2020-10-22 10:45 UTC|newest] Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top 2020-10-22 10:44 Serge Petrenko [this message] 2020-10-22 11:05 ` Serge Petrenko
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20201022104456.51722-1-sergepetrenko@tarantool.org \ --to=sergepetrenko@tarantool.org \ --cc=kyukhin@tarantool.org \ --cc=tarantool-patches@dev.tarantool.org \ --cc=v.shpilevoy@tarantool.org \ --subject='Re: [Tarantool-patches] [PATCH] raft: fix an assertion failure on transition to voter' \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox