From f4141f0f5184db361535fe021b5b74ad82b41f92 Mon Sep 17 00:00:00 2001 From: Gyu-Ho Lee Date: Wed, 10 Aug 2016 16:24:29 -0700 Subject: [PATCH] raft: handle 'MsgTransferLeader' in follower --- raft/raft.go | 12 +++++++----- raft/util.go | 2 +- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/raft/raft.go b/raft/raft.go index adef48e72..740c832b8 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -590,11 +590,6 @@ func (r *raft) Step(m pb.Message) error { } return nil } - if m.Type == pb.MsgTransferLeader { - if r.state != StateLeader { - r.logger.Debugf("%x [term %d state %v] ignoring MsgTransferLeader to %x", r.id, r.Term, r.state, m.From) - } - } switch { case m.Term == 0: @@ -874,6 +869,13 @@ func stepFollower(r *raft, m pb.Message) { r.id, r.raftLog.lastTerm(), r.raftLog.lastIndex(), r.Vote, m.From, m.LogTerm, m.Index, r.Term) r.send(pb.Message{To: m.From, Type: pb.MsgVoteResp, Reject: true}) } + case pb.MsgTransferLeader: + if r.lead == None { + r.logger.Infof("%x no leader at term %d; dropping leader transfer msg", r.id, r.Term) + return + } + m.To = r.lead + r.send(m) case pb.MsgTimeoutNow: r.logger.Infof("%x [term %d] received MsgTimeoutNow from %x and starts an election to get leadership.", r.id, r.Term, m.From) r.campaign(campaignTransfer) diff --git a/raft/util.go b/raft/util.go index c57855a17..0db073003 100644 --- a/raft/util.go +++ b/raft/util.go @@ -48,7 +48,7 @@ func max(a, b uint64) uint64 { func IsLocalMsg(msgt pb.MessageType) bool { return msgt == pb.MsgHup || msgt == pb.MsgBeat || msgt == pb.MsgUnreachable || - msgt == pb.MsgSnapStatus || msgt == pb.MsgCheckQuorum || msgt == pb.MsgTransferLeader + msgt == pb.MsgSnapStatus || msgt == pb.MsgCheckQuorum } func IsResponseMsg(msgt pb.MessageType) bool {