Improve Candidate.votingPeers 51/105151/4
authorRobert Varga <robert.varga@pantheon.tech>
Mon, 3 Apr 2023 10:55:44 +0000 (12:55 +0200)
committerRobert Varga <robert.varga@pantheon.tech>
Mon, 3 Apr 2023 13:59:15 +0000 (15:59 +0200)
Use ImmutableList to ensure the list is never modified. This also
improves overhead/performance slightly.

Change-Id: Iad491da0e446da0a07e96067846c2c57c0dcfb9a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Candidate.java

index 569f6b3d245fe5a6c1021f0537f08b3e1ec36f6e..77f7a06c49dffe75557e6544e2deba03f16f5614 100644 (file)
@@ -9,8 +9,7 @@ package org.opendaylight.controller.cluster.raft.behaviors;
 
 import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
 
 import akka.actor.ActorRef;
 import akka.actor.ActorSelection;
-import java.util.ArrayList;
-import java.util.Collection;
+import com.google.common.collect.ImmutableList;
 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.PeerInfo;
 import org.opendaylight.controller.cluster.raft.RaftActorContext;
 import org.opendaylight.controller.cluster.raft.RaftState;
@@ -44,21 +43,18 @@ import scala.concurrent.duration.FiniteDuration;
  * </ul>
  */
 public final class Candidate extends AbstractRaftActorBehavior {
  * </ul>
  */
 public final class Candidate extends AbstractRaftActorBehavior {
-
-    private int voteCount;
-
+    private final ImmutableList<String> votingPeers;
     private final int votesRequired;
 
     private final int votesRequired;
 
-    private final Collection<String> votingPeers = new ArrayList<>();
+    private int voteCount;
 
     public Candidate(final RaftActorContext context) {
         super(context, RaftState.Candidate);
 
 
     public Candidate(final RaftActorContext context) {
         super(context, RaftState.Candidate);
 
-        for (PeerInfo peer: context.getPeers()) {
-            if (peer.isVoting()) {
-                votingPeers.add(peer.getId());
-            }
-        }
+        votingPeers = context.getPeers().stream()
+            .filter(PeerInfo::isVoting)
+            .map(PeerInfo::getId)
+            .collect(ImmutableList.toImmutableList());
 
         log.debug("{}: Election: Candidate has following voting peers: {}", logName(), votingPeers);
 
 
         log.debug("{}: Election: Candidate has following voting peers: {}", logName(), votingPeers);
 
@@ -157,9 +153,7 @@ public final class Candidate extends AbstractRaftActorBehavior {
             return this;
         }
 
             return this;
         }
 
-        if (message instanceof RaftRPC) {
-
-            RaftRPC rpc = (RaftRPC) message;
+        if (message instanceof RaftRPC rpc) {
 
             log.debug("{}: RaftRPC message received {}, my term is {}", logName(), rpc,
                         context.getTermInformation().getCurrentTerm());
 
             log.debug("{}: RaftRPC message received {}, my term is {}", logName(), rpc,
                         context.getTermInformation().getCurrentTerm());