From 3921295b2166c338592622b723067426df9e4df3 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Mon, 14 Jul 2014 22:39:44 -0700 Subject: [PATCH] raft: update lead to none when receives vaild msgVote --- raft/raft.go | 6 +++++- raft/raft_test.go | 9 ++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/raft/raft.go b/raft/raft.go index a6bae130d..cd70fe8b4 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -311,7 +311,11 @@ func (sm *stateMachine) Step(m Message) (ok bool) { case m.Term == 0: // local message case m.Term > sm.term.Get(): - sm.becomeFollower(m.Term, m.From) + lead := m.From + if m.Type == msgVote { + lead = none + } + sm.becomeFollower(m.Term, lead) case m.Term < sm.term.Get(): // ignore return true diff --git a/raft/raft_test.go b/raft/raft_test.go index 2e20baad6..248501ff8 100644 --- a/raft/raft_test.go +++ b/raft/raft_test.go @@ -685,7 +685,7 @@ func TestAllServerStepdown(t *testing.T) { } for j, msgType := range tmsgTypes { - sm.Step(Message{Type: msgType, Term: tterm, LogTerm: tterm}) + sm.Step(Message{From: 1, Type: msgType, Term: tterm, LogTerm: tterm}) if sm.state != tt.wstate { t.Errorf("#%d.%d state = %v , want %v", i, j, sm.state, tt.wstate) @@ -696,6 +696,13 @@ func TestAllServerStepdown(t *testing.T) { if int64(len(sm.log.ents)) != tt.windex { t.Errorf("#%d.%d index = %v , want %v", i, j, len(sm.log.ents), tt.windex) } + wlead := int64(1) + if msgType == msgVote { + wlead = none + } + if sm.lead.Get() != wlead { + t.Errorf("#%d, sm.lead = %d, want %d", i, sm.lead.Get(), none) + } } } }