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%2FFollowerLogInformationImpl.java;h=89884462128b10147383350429f979bd1f8744ca;hb=15f11d24306fe2796411e8078a84fc82213bacf6;hp=5bf37d6534e5b7b38e5664f67b2dbf0d2d86f113;hpb=3bc363a69d6d48709f7fd741ef018ecd75b8f99b;p=controller.git diff --git a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java index 5bf37d6534..8988446212 100644 --- a/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java +++ b/opendaylight/md-sal/sal-akka-raft/src/main/java/org/opendaylight/controller/cluster/raft/FollowerLogInformationImpl.java @@ -8,12 +8,11 @@ package org.opendaylight.controller.cluster.raft; +import com.google.common.base.Preconditions; import com.google.common.base.Stopwatch; import java.util.concurrent.TimeUnit; public class FollowerLogInformationImpl implements FollowerLogInformation { - private final String id; - private final Stopwatch stopwatch = Stopwatch.createUnstarted(); private final RaftActorContext context; @@ -28,13 +27,19 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { private short payloadVersion = -1; - private FollowerState state = FollowerState.VOTING; + // Assume the HELIUM_VERSION version initially for backwards compatibility until we obtain the follower's + // actual version via AppendEntriesReply. Although we no longer support the Helium version, a pre-Boron + // follower will not have the version field in AppendEntriesReply so it will be set to 0 which is + // HELIUM_VERSION. + private short raftVersion = RaftVersions.HELIUM_VERSION; + + private final PeerInfo peerInfo; - public FollowerLogInformationImpl(String id, long matchIndex, RaftActorContext context) { - this.id = id; + public FollowerLogInformationImpl(PeerInfo peerInfo, long matchIndex, RaftActorContext context) { this.nextIndex = context.getCommitIndex(); this.matchIndex = matchIndex; this.context = context; + this.peerInfo = Preconditions.checkNotNull(peerInfo); } @Override @@ -74,7 +79,7 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public String getId() { - return id; + return peerInfo.getId(); } @Override @@ -89,7 +94,7 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public boolean isFollowerActive() { - if(state == FollowerState.VOTING_NOT_INITIALIZED) { + if(peerInfo.getVotingState() == VotingState.VOTING_NOT_INITIALIZED) { return false; } @@ -120,7 +125,7 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public boolean okToReplicate() { - if(state == FollowerState.VOTING_NOT_INITIALIZED) { + if(peerInfo.getVotingState() == VotingState.VOTING_NOT_INITIALIZED) { return false; } @@ -155,25 +160,20 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { } @Override - public boolean canParticipateInConsensus() { - return state == FollowerState.VOTING; - } - - @Override - public void setFollowerState(FollowerState state) { - this.state = state; + public short getRaftVersion() { + return raftVersion; } @Override - public FollowerState getFollowerState() { - return state; + public void setRaftVersion(short raftVersion) { + this.raftVersion = raftVersion; } @Override public String toString() { - return "FollowerLogInformationImpl [id=" + id + ", nextIndex=" + nextIndex + ", matchIndex=" + matchIndex - + ", lastReplicatedIndex=" + lastReplicatedIndex + ", state=" + state + ", stopwatch=" - + stopwatch.elapsed(TimeUnit.MILLISECONDS) + ", followerTimeoutMillis=" + return "FollowerLogInformationImpl [id=" + getId() + ", nextIndex=" + nextIndex + ", matchIndex=" + matchIndex + + ", lastReplicatedIndex=" + lastReplicatedIndex + ", votingState=" + peerInfo.getVotingState() + + ", stopwatch=" + stopwatch.elapsed(TimeUnit.MILLISECONDS) + ", followerTimeoutMillis=" + context.getConfigParams().getElectionTimeOutInterval().toMillis() + "]"; } }