Browse Source

raft: set term in reset

Blake Mizerany 11 years ago
parent
commit
5778c49689
2 changed files with 8 additions and 9 deletions
  1. 6 7
      raft/raft.go
  2. 2 2
      raft/raft_test.go

+ 6 - 7
raft/raft.go

@@ -118,7 +118,7 @@ func newStateMachine(id int, peers []int) *stateMachine {
 	for p := range peers {
 		sm.ins[p] = &index{}
 	}
-	sm.reset()
+	sm.reset(0)
 	return sm
 }
 
@@ -181,7 +181,8 @@ func (sm *stateMachine) nextEnts() (ents []Entry) {
 	return sm.log.nextEnts()
 }
 
-func (sm *stateMachine) reset() {
+func (sm *stateMachine) reset(term int) {
+	sm.term = term
 	sm.lead = none
 	sm.vote = none
 	sm.votes = make(map[int]bool)
@@ -198,8 +199,7 @@ func (sm *stateMachine) q() int {
 }
 
 func (sm *stateMachine) becomeFollower(term, lead int) {
-	sm.reset()
-	sm.term = term
+	sm.reset(term)
 	sm.lead = lead
 	sm.state = stateFollower
 	sm.pendingConf = false
@@ -210,8 +210,7 @@ func (sm *stateMachine) becomeCandidate() {
 	if sm.state == stateLeader {
 		panic("invalid transition [leader -> candidate]")
 	}
-	sm.reset()
-	sm.term++
+	sm.reset(sm.term + 1)
 	sm.vote = sm.id
 	sm.state = stateCandidate
 }
@@ -221,7 +220,7 @@ func (sm *stateMachine) becomeLeader() {
 	if sm.state == stateFollower {
 		panic("invalid transition [follower -> leader]")
 	}
-	sm.reset()
+	sm.reset(sm.term)
 	sm.lead = sm.id
 	sm.state = stateLeader
 

+ 2 - 2
raft/raft_test.go

@@ -653,7 +653,7 @@ func ents(terms ...int) *stateMachine {
 	}
 
 	sm := &stateMachine{log: &log{ents: ents}}
-	sm.reset()
+	sm.reset(0)
 	return sm
 }
 
@@ -681,7 +681,7 @@ func newNetwork(peers ...Interface) *network {
 			for i := range peerAddrs {
 				v.ins[i] = &index{}
 			}
-			v.reset()
+			v.reset(0)
 		}
 	}
 	return &network{peers: peers, dropm: make(map[connem]float64)}