Browse Source

raft: use if statement to handle voteResp

Xiang Li 11 years ago
parent
commit
88674a623a
1 changed files with 4 additions and 10 deletions
  1. 4 10
      raft/raft.go

+ 4 - 10
raft/raft.go

@@ -307,18 +307,12 @@ func (sm *stateMachine) Step(m Message) {
 		case msgApp:
 			handleAppendEntries()
 		case msgVote:
-			switch sm.vote {
-			case m.From:
+			if (sm.vote == none || sm.vote == m.From) && sm.log.isUpToDate(m.Index, m.LogTerm) {
+				sm.vote = m.From
 				sm.send(Message{To: m.From, Type: msgVoteResp, Index: sm.log.lastIndex()})
-				return
-			case none:
-				if sm.log.isUpToDate(m.Index, m.LogTerm) {
-					sm.vote = m.From
-					sm.send(Message{To: m.From, Type: msgVoteResp, Index: sm.log.lastIndex()})
-					return
-				}
+			} else {
+				sm.send(Message{To: m.From, Type: msgVoteResp, Index: -1})
 			}
-			sm.send(Message{To: m.From, Type: msgVoteResp, Index: -1})
 		}
 	}
 }