From b0d865e84512b8c30169659b91e1b21df72d2c65 Mon Sep 17 00:00:00 2001 From: Xiang Li Date: Mon, 8 Sep 2014 21:15:35 -0700 Subject: [PATCH] raft: record previous state is enough --- raft/node.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/raft/node.go b/raft/node.go index 65908d411..ca0429182 100644 --- a/raft/node.go +++ b/raft/node.go @@ -9,7 +9,10 @@ import ( "github.com/coreos/etcd/third_party/code.google.com/p/go.net/context" ) -var ErrStopped = errors.New("raft: stopped") +var ( + EmptyState = pb.State{} + ErrStopped = errors.New("raft: stopped") +) // Ready encapsulates the entries and messages that are ready to be saved to // stable storage, committed or sent to other peers. @@ -35,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(prev Ready) bool { - return !isStateEqual(prev.State, rd.State) || len(rd.Entries) > 0 || len(rd.CommittedEntries) > 0 || len(rd.Messages) > 0 +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 } type Node struct { @@ -83,8 +86,7 @@ func (n *Node) run(r *raft) { readyc := n.readyc var lead int64 - var prev Ready - prev.State = r.State + prevSt := r.State for { if lead != r.lead { @@ -104,7 +106,7 @@ func (n *Node) run(r *raft) { r.msgs, } - if rd.containsUpdates(prev) { + if rd.containsUpdates(prevSt) { readyc = n.readyc } else { readyc = nil @@ -121,7 +123,7 @@ func (n *Node) run(r *raft) { case readyc <- rd: r.raftLog.resetNextEnts() r.raftLog.resetUnstable() - prev = rd + prevSt = rd.State r.msgs = nil case <-n.done: return