X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2FRaftActorServerConfigurationSupport.java;h=004272192c393b2e9267f6175312bb59bb71fdb4;hb=HEAD;hp=29641cb00e441d5dedc5e7cccccd69bb0b0e6d3a;hpb=b4bf55727093657662d8c16a50fa85f87978a586;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java index 29641cb00e..fd2cd419d7 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/RaftActorServerConfigurationSupport.java @@ -12,11 +12,10 @@ import static java.util.Objects.requireNonNull; import akka.actor.ActorRef; import akka.actor.ActorSelection; import akka.actor.Cancellable; +import com.google.common.collect.ImmutableList; import java.util.ArrayDeque; -import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; -import java.util.List; import java.util.Map; import java.util.Queue; import java.util.UUID; @@ -28,6 +27,7 @@ import org.opendaylight.controller.cluster.raft.behaviors.AbstractLeader; import org.opendaylight.controller.cluster.raft.messages.AddServer; import org.opendaylight.controller.cluster.raft.messages.AddServerReply; import org.opendaylight.controller.cluster.raft.messages.ChangeServersVotingStatus; +import org.opendaylight.controller.cluster.raft.messages.Payload; import org.opendaylight.controller.cluster.raft.messages.RemoveServer; import org.opendaylight.controller.cluster.raft.messages.RemoveServerReply; import org.opendaylight.controller.cluster.raft.messages.ServerChangeReply; @@ -36,7 +36,6 @@ import org.opendaylight.controller.cluster.raft.messages.ServerRemoved; import org.opendaylight.controller.cluster.raft.messages.UnInitializedFollowerSnapshotReply; import org.opendaylight.controller.cluster.raft.persisted.ServerConfigurationPayload; import org.opendaylight.controller.cluster.raft.persisted.ServerInfo; -import org.opendaylight.controller.cluster.raft.protobuff.client.messages.Payload; import org.opendaylight.yangtools.concepts.Identifier; import org.opendaylight.yangtools.util.AbstractUUIDIdentifier; import org.slf4j.Logger; @@ -64,27 +63,27 @@ class RaftActorServerConfigurationSupport { RaftActorServerConfigurationSupport(final RaftActor raftActor) { this.raftActor = raftActor; - this.raftContext = raftActor.getRaftActorContext(); + raftContext = raftActor.getRaftActorContext(); } boolean handleMessage(final Object message, final ActorRef sender) { - if (message instanceof AddServer) { - onAddServer((AddServer) message, sender); + if (message instanceof AddServer addServer) { + onAddServer(addServer, sender); return true; - } else if (message instanceof RemoveServer) { - onRemoveServer((RemoveServer) message, sender); + } else if (message instanceof RemoveServer removeServer) { + onRemoveServer(removeServer, sender); return true; - } else if (message instanceof ChangeServersVotingStatus) { - onChangeServersVotingStatus((ChangeServersVotingStatus) message, sender); + } else if (message instanceof ChangeServersVotingStatus changeServersVotingStatus) { + onChangeServersVotingStatus(changeServersVotingStatus, sender); return true; - } else if (message instanceof ServerOperationTimeout) { - currentOperationState.onServerOperationTimeout((ServerOperationTimeout) message); + } else if (message instanceof ServerOperationTimeout serverOperationTimeout) { + currentOperationState.onServerOperationTimeout(serverOperationTimeout); return true; - } else if (message instanceof UnInitializedFollowerSnapshotReply) { - currentOperationState.onUnInitializedFollowerSnapshotReply((UnInitializedFollowerSnapshotReply) message); + } else if (message instanceof UnInitializedFollowerSnapshotReply uninitFollowerSnapshotReply) { + currentOperationState.onUnInitializedFollowerSnapshotReply(uninitFollowerSnapshotReply); return true; - } else if (message instanceof ApplyState) { - return onApplyState((ApplyState) message); + } else if (message instanceof ApplyState applyState) { + return onApplyState(applyState); } else if (message instanceof SnapshotComplete) { currentOperationState.onSnapshotComplete(); return false; @@ -748,7 +747,7 @@ class RaftActorServerConfigurationSupport { } private boolean updateLocalPeerInfo() { - List newServerInfoList = newServerInfoList(); + final var newServerInfoList = newServerInfoList(); // Check if new voting state would leave us with no voting members. boolean atLeastOneVoting = false; @@ -765,28 +764,28 @@ class RaftActorServerConfigurationSupport { } raftContext.updatePeerIds(new ServerConfigurationPayload(newServerInfoList)); - if (raftActor.getCurrentBehavior() instanceof AbstractLeader) { - AbstractLeader leader = (AbstractLeader) raftActor.getCurrentBehavior(); + if (raftActor.getCurrentBehavior() instanceof AbstractLeader leader) { leader.updateMinReplicaCount(); } return true; } - private List newServerInfoList() { - Map serverVotingStatusMap = changeVotingStatusContext.getOperation() - .getServerVotingStatusMap(); - List newServerInfoList = new ArrayList<>(); - for (String peerId: raftContext.getPeerIds()) { - newServerInfoList.add(new ServerInfo(peerId, serverVotingStatusMap.containsKey(peerId) - ? serverVotingStatusMap.get(peerId) : raftContext.getPeerInfo(peerId).isVoting())); + private ImmutableList newServerInfoList() { + final var serverVotingStatusMap = changeVotingStatusContext.getOperation().getServerVotingStatusMap(); + final var peerInfos = raftContext.getPeers(); + final var newServerInfoList = ImmutableList.builderWithExpectedSize(peerInfos.size() + 1); + for (var peerInfo : peerInfos) { + final var peerId = peerInfo.getId(); + final var voting = serverVotingStatusMap.get(peerId); + newServerInfoList.add(new ServerInfo(peerId, voting != null ? voting : peerInfo.isVoting())); } - newServerInfoList.add(new ServerInfo(raftContext.getId(), serverVotingStatusMap.containsKey( - raftContext.getId()) ? serverVotingStatusMap.get(raftContext.getId()) - : raftContext.isVotingMember())); + final var myId = raftContext.getId(); + final var myVoting = serverVotingStatusMap.get(myId); + newServerInfoList.add(new ServerInfo(myId, myVoting != null ? myVoting : raftContext.isVotingMember())); - return newServerInfoList; + return newServerInfoList.build(); } }