X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fsal-akka-raft%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fcluster%2Fraft%2Fbehaviors%2FFollower.java;h=4913d98c36e9090253cf0ea4ece40873a2d655cd;hb=703c260bebba0a8f7efa85edef4ad4d359c59cda;hp=288ce32a64ec21286adda9cf3672f7b53d1bf506;hpb=d3d04140ac3d7a2a90a3b953cc4ea27fca2bfc32;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java index 288ce32a64..4913d98c36 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/behaviors/Follower.java @@ -16,8 +16,8 @@ import akka.cluster.Member; import akka.cluster.MemberStatus; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Stopwatch; +import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.io.IOException; -import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Optional; @@ -53,6 +53,7 @@ import org.opendaylight.controller.cluster.raft.persisted.Snapshot; * convert to candidate * */ +// Non-final for testing public class Follower extends AbstractRaftActorBehavior { private static final long MAX_ELECTION_TIMEOUT_FACTOR = 18; @@ -69,11 +70,13 @@ public class Follower extends AbstractRaftActorBehavior { this(context, null, (short)-1); } + @SuppressFBWarnings(value = "MC_OVERRIDABLE_METHOD_CALL_IN_CONSTRUCTOR", + justification = "electionDuration() is not final for Candidate override") public Follower(final RaftActorContext context, final String initialLeaderId, final short initialLeaderPayloadVersion) { super(context, RaftState.Follower); - this.leaderId = initialLeaderId; - this.leaderPayloadVersion = initialLeaderPayloadVersion; + leaderId = initialLeaderId; + leaderPayloadVersion = initialLeaderPayloadVersion; initialSyncStatusTracker = new SyncStatusTracker(context.getActor(), getId(), context.getConfigParams() .getSyncIndexThreshold()); @@ -324,8 +327,8 @@ public class Follower extends AbstractRaftActorBehavior { shouldCaptureSnapshot.compareAndSet(false, context.getReplicatedLog().shouldCaptureSnapshot(entry.getIndex())); - if (entry.getData() instanceof ServerConfigurationPayload) { - context.updatePeerIds((ServerConfigurationPayload)entry.getData()); + if (entry.getData() instanceof ServerConfigurationPayload serverConfiguration) { + context.updatePeerIds(serverConfiguration); } } @@ -452,12 +455,11 @@ public class Follower extends AbstractRaftActorBehavior { return this; } - if (!(message instanceof RaftRPC)) { + if (!(message instanceof RaftRPC rpc)) { // The rest of the processing requires the message to be a RaftRPC return null; } - final RaftRPC rpc = (RaftRPC) message; // If RPC request or response contains term T > currentTerm: // set currentTerm = T, convert to follower (§5.1) // This applies to all RPC messages and responses @@ -468,14 +470,14 @@ public class Follower extends AbstractRaftActorBehavior { context.getTermInformation().updateAndPersist(rpc.getTerm(), null); } - if (rpc instanceof InstallSnapshot) { - handleInstallSnapshot(sender, (InstallSnapshot) rpc); + if (rpc instanceof InstallSnapshot installSnapshot) { + handleInstallSnapshot(sender, installSnapshot); restartLastLeaderMessageTimer(); scheduleElection(electionDuration()); return this; } - if (!(rpc instanceof RequestVote) || canGrantVote((RequestVote) rpc)) { + if (!(rpc instanceof RequestVote requestVote) || canGrantVote(requestVote)) { restartLastLeaderMessageTimer(); scheduleElection(electionDuration()); } @@ -597,7 +599,7 @@ public class Follower extends AbstractRaftActorBehavior { + "all members {} self member: {}", logName(), unreachable, members, selfMember); // no unreachable peers means we cannot be isolated - if (unreachable.size() == 0) { + if (unreachable.isEmpty()) { return false; } @@ -607,11 +609,7 @@ public class Follower extends AbstractRaftActorBehavior { membersToCheck.removeAll(unreachable); // check if the only member not unreachable is us - if (membersToCheck.size() == 1 && membersToCheck.iterator().next().equals(selfMember)) { - return true; - } - - return false; + return membersToCheck.size() == 1 && membersToCheck.iterator().next().equals(selfMember); } private void handleInstallSnapshot(final ActorRef sender, final InstallSnapshot installSnapshot) { @@ -638,7 +636,7 @@ public class Follower extends AbstractRaftActorBehavior { Snapshot snapshot = Snapshot.create( context.getSnapshotManager().convertSnapshot(snapshotTracker.getSnapshotBytes()), - new ArrayList<>(), + List.of(), installSnapshot.getLastIncludedIndex(), installSnapshot.getLastIncludedTerm(), installSnapshot.getLastIncludedIndex(), @@ -672,8 +670,7 @@ public class Follower extends AbstractRaftActorBehavior { } catch (IOException e) { log.debug("{}: Exception in InstallSnapshot of follower", logName(), e); - sender.tell(new InstallSnapshotReply(currentTerm(), context.getId(), - -1, false), actor()); + sender.tell(new InstallSnapshotReply(currentTerm(), context.getId(), -1, false), actor()); closeSnapshotTracker(); }