diff --git a/raft/raft.go b/raft/raft.go index 1fd28e10d..68ab2c47a 100644 --- a/raft/raft.go +++ b/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 diff --git a/raft/raft_test.go b/raft/raft_test.go index 1f48f7da1..753867215 100644 --- a/raft/raft_test.go +++ b/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)}