From c28fef5fc4fc630af372ce3ca803f9de3142a150 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Mon, 8 Sep 2014 21:40:02 -0700 Subject: [PATCH] raft: set ready.st to empty state, if current state is equal to previous state --- raft/node.go | 23 +++++++++++++++-------- raft/node_test.go | 2 +- 2 files changed, 16 insertions(+), 9 deletions(-) diff --git a/raft/node.go b/raft/node.go index ca0429182..502c1e378 100644 --- a/raft/node.go +++ b/raft/node.go @@ -38,8 +38,8 @@ func isStateEqual(a, b pb.State) bool { return a.Term == b.Term && a.Vote == b.Vote && a.LastIndex == b.LastIndex } -func (rd Ready) containsUpdates(prevSt pb.State) bool { - return !isStateEqual(prevSt, rd.State) || len(rd.Entries) > 0 || len(rd.CommittedEntries) > 0 || len(rd.Messages) > 0 +func (rd Ready) containsUpdates() bool { + return !isStateEqual(EmptyState, rd.State) || len(rd.Entries) > 0 || len(rd.CommittedEntries) > 0 || len(rd.Messages) > 0 } type Node struct { @@ -100,13 +100,18 @@ func (n *Node) run(r *raft) { } rd := Ready{ - r.State, - r.raftLog.unstableEnts(), - r.raftLog.nextEnts(), - r.msgs, + Entries: r.raftLog.unstableEnts(), + CommittedEntries: r.raftLog.nextEnts(), + Messages: r.msgs, } - if rd.containsUpdates(prevSt) { + if isStateEqual(r.State, prevSt) { + rd.State = EmptyState + } else { + rd.State = r.State + } + + if rd.containsUpdates() { readyc = n.readyc } else { readyc = nil @@ -123,7 +128,9 @@ func (n *Node) run(r *raft) { case readyc <- rd: r.raftLog.resetNextEnts() r.raftLog.resetUnstable() - prevSt = rd.State + if !isStateEqual(rd.State, EmptyState) { + prevSt = rd.State + } r.msgs = nil case <-n.done: return diff --git a/raft/node_test.go b/raft/node_test.go index 7a511d1b8..21b800483 100644 --- a/raft/node_test.go +++ b/raft/node_test.go @@ -51,7 +51,7 @@ func TestNodeRestart(t *testing.T) { st := raftpb.State{Term: 1, Vote: -1, Commit: 1, LastIndex: 2} want := Ready{ - State: st, + State: EmptyState, // commit upto index commit index in st CommittedEntries: entries[:st.Commit], }