diff --git a/raft-java-core/src/main/java/com/github/wenweihu86/raft/RaftNode.java b/raft-java-core/src/main/java/com/github/wenweihu86/raft/RaftNode.java index b0f1835..1f07602 100644 --- a/raft-java-core/src/main/java/com/github/wenweihu86/raft/RaftNode.java +++ b/raft-java-core/src/main/java/com/github/wenweihu86/raft/RaftNode.java @@ -250,16 +250,19 @@ private void requestVote(Peer peer) { lock.unlock(); } + RaftMessage.VoteRequest request = requestBuilder.build(); peer.getRpcClient().asyncCall( - "RaftConsensusService.requestVote", requestBuilder.build(), - new VoteResponseCallback(peer)); + "RaftConsensusService.requestVote", request, + new VoteResponseCallback(peer, request)); } private class VoteResponseCallback implements RPCCallback { private Peer peer; + private RaftMessage.VoteRequest request; - public VoteResponseCallback(Peer peer) { + public VoteResponseCallback(Peer peer, RaftMessage.VoteRequest request) { this.peer = peer; + this.request = request; } @Override @@ -267,7 +270,7 @@ public void success(RaftMessage.VoteResponse response) { lock.lock(); try { peer.setVoteGranted(response.getGranted()); - if (currentTerm != response.getTerm() || state != NodeState.STATE_CANDIDATE) { + if (currentTerm != request.getTerm() || state != NodeState.STATE_CANDIDATE) { LOG.info("ignore requestVote RPC result"); return; }