From 7fe608532a67bb93cb7061852e5492c053a370e8 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Sat, 7 Mar 2015 22:31:09 -0800 Subject: [PATCH] raft: do not reset vote if term is not changed raft MUST keep the voting information for the same term. reset should not reset vote if term is not changed. --- raft/multinode_test.go | 4 ++-- raft/node_test.go | 4 ++-- raft/raft.go | 6 ++++-- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/raft/multinode_test.go b/raft/multinode_test.go index 9fd1f88b1..2db3195d9 100644 --- a/raft/multinode_test.go +++ b/raft/multinode_test.go @@ -255,7 +255,7 @@ func TestMultiNodeStart(t *testing.T) { wants := []Ready{ { SoftState: &SoftState{Lead: 1, RaftState: StateLeader}, - HardState: raftpb.HardState{Term: 2, Commit: 2}, + HardState: raftpb.HardState{Term: 2, Commit: 2, Vote: 1}, Entries: []raftpb.Entry{ {Type: raftpb.EntryConfChange, Term: 1, Index: 1, Data: ccdata}, {Term: 2, Index: 2}, @@ -266,7 +266,7 @@ func TestMultiNodeStart(t *testing.T) { }, }, { - HardState: raftpb.HardState{Term: 2, Commit: 3}, + HardState: raftpb.HardState{Term: 2, Commit: 3, Vote: 1}, Entries: []raftpb.Entry{{Term: 2, Index: 3, Data: []byte("foo")}}, CommittedEntries: []raftpb.Entry{{Term: 2, Index: 3, Data: []byte("foo")}}, }, diff --git a/raft/node_test.go b/raft/node_test.go index cbd537f9b..b4a7440f3 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -304,7 +304,7 @@ func TestNodeStart(t *testing.T) { wants := []Ready{ { SoftState: &SoftState{Lead: 1, RaftState: StateLeader}, - HardState: raftpb.HardState{Term: 2, Commit: 2}, + HardState: raftpb.HardState{Term: 2, Commit: 2, Vote: 1}, Entries: []raftpb.Entry{ {Type: raftpb.EntryConfChange, Term: 1, Index: 1, Data: ccdata}, {Term: 2, Index: 2}, @@ -315,7 +315,7 @@ func TestNodeStart(t *testing.T) { }, }, { - HardState: raftpb.HardState{Term: 2, Commit: 3}, + HardState: raftpb.HardState{Term: 2, Commit: 3, Vote: 1}, Entries: []raftpb.Entry{{Term: 2, Index: 3, Data: []byte("foo")}}, CommittedEntries: []raftpb.Entry{{Term: 2, Index: 3, Data: []byte("foo")}}, }, diff --git a/raft/raft.go b/raft/raft.go index c1f9aebce..f9f6853ff 100644 --- a/raft/raft.go +++ b/raft/raft.go @@ -358,9 +358,11 @@ func (r *raft) maybeCommit() bool { } func (r *raft) reset(term uint64) { - r.Term = term + if r.Term != term { + r.Term = term + r.Vote = None + } r.lead = None - r.Vote = None r.elapsed = 0 r.votes = make(map[uint64]bool) for i := range r.prs {