Do not declare thrown Exception AbstractLeader
[controller.git] / opendaylight / md-sal / sal-akka-raft / src / main / java / org / opendaylight / controller / cluster / raft / behaviors / Candidate.java
index 8baf0d8e815d96957c1d4e6cee3ad55b1bd21f07..612c327aeb054dd1cacb8a74a82861ede3f3ef0d 100644 (file)
@@ -10,7 +10,9 @@ package org.opendaylight.controller.cluster.raft.behaviors;
 
 import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
+import java.util.ArrayList;
 import java.util.Collection;
+import org.opendaylight.controller.cluster.raft.PeerInfo;
 import org.opendaylight.controller.cluster.raft.RaftActorContext;
 import org.opendaylight.controller.cluster.raft.RaftState;
 import org.opendaylight.controller.cluster.raft.base.messages.ElectionTimeout;
@@ -44,23 +46,27 @@ public class Candidate extends AbstractRaftActorBehavior {
 
     private final int votesRequired;
 
-    private final Collection<String> peers;
+    private final Collection<String> votingPeers = new ArrayList<>();
 
     public Candidate(RaftActorContext context) {
         super(context, RaftState.Candidate);
 
-        peers = context.getPeerIds();
+        for(PeerInfo peer: context.getPeers()) {
+            if(peer.isVoting()) {
+                votingPeers.add(peer.getId());
+            }
+        }
 
         if(LOG.isDebugEnabled()) {
-            LOG.debug("{}: Election: Candidate has following peers: {}", logName(), peers);
+            LOG.debug("{}: Election: Candidate has following voting peers: {}", logName(), votingPeers);
         }
 
-        votesRequired = getMajorityVoteCount(peers.size());
+        votesRequired = getMajorityVoteCount(votingPeers.size());
 
         startNewTerm();
 
-        if(peers.isEmpty()){
-            actor().tell(ELECTION_TIMEOUT, actor());
+        if(votingPeers.isEmpty()){
+            actor().tell(ElectionTimeout.INSTANCE, actor());
         } else {
             scheduleElection(electionDuration());
         }
@@ -170,7 +176,7 @@ public class Candidate extends AbstractRaftActorBehavior {
         // Request for a vote
         // TODO: Retry request for vote if replies do not arrive in a reasonable
         // amount of time TBD
-        for (String peerId : peers) {
+        for (String peerId : votingPeers) {
             ActorSelection peerActor = context.getPeerActorSelection(peerId);
             if(peerActor != null) {
                 RequestVote requestVote = new RequestVote(