Browse Source

raft: record previous state is enough

Xiang Li 11 years ago
parent
commit
b0d865e845
1 changed files with 9 additions and 7 deletions
  1. 9 7
      raft/node.go

+ 9 - 7
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