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=1c8d5e6e10647bcbac9ad7f55dd247e6f51f94c6;hb=8882e6077db69d22bcc57fcf12dd4a02a81a4967;hp=bcfd472bf6c394ab88b5e10ced1a0263be01e9f6;hpb=a681e6bec3bbd7b536302ee9e083ae04b7f5ebdd;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 bcfd472bf6..1c8d5e6e10 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; @@ -26,12 +25,15 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { private final Stopwatch lastReplicatedStopwatch = Stopwatch.createUnstarted(); + private short payloadVersion = -1; + + 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 @@ -71,7 +73,7 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public String getId() { - return id; + return peerInfo.getId(); } @Override @@ -86,6 +88,10 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public boolean isFollowerActive() { + if(peerInfo.getVotingState() == VotingState.VOTING_NOT_INITIALIZED) { + return false; + } + long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS); return (stopwatch.isRunning()) && (elapsed <= context.getConfigParams().getElectionTimeOutInterval().toMillis()); @@ -113,6 +119,10 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public boolean okToReplicate() { + if(peerInfo.getVotingState() == VotingState.VOTING_NOT_INITIALIZED) { + return false; + } + // Return false if we are trying to send duplicate data before the heartbeat interval if(getNextIndex() == lastReplicatedIndex){ if(lastReplicatedStopwatch.elapsed(TimeUnit.MILLISECONDS) < context.getConfigParams() @@ -133,14 +143,21 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { lastReplicatedStopwatch.start(); } + @Override + public short getPayloadVersion() { + return payloadVersion; + } + + @Override + public void setPayloadVersion(short payloadVersion) { + this.payloadVersion = payloadVersion; + } + @Override public String toString() { - StringBuilder builder = new StringBuilder(); - builder.append("FollowerLogInformationImpl [id=").append(id).append(", nextIndex=").append(nextIndex) - .append(", matchIndex=").append(matchIndex).append(", stopwatch=") - .append(stopwatch.elapsed(TimeUnit.MILLISECONDS)) - .append(", followerTimeoutMillis=") - .append(context.getConfigParams().getElectionTimeOutInterval().toMillis()).append("]"); - return builder.toString(); + return "FollowerLogInformationImpl [id=" + getId() + ", nextIndex=" + nextIndex + ", matchIndex=" + matchIndex + + ", lastReplicatedIndex=" + lastReplicatedIndex + ", votingState=" + peerInfo.getVotingState() + + ", stopwatch=" + stopwatch.elapsed(TimeUnit.MILLISECONDS) + ", followerTimeoutMillis=" + + context.getConfigParams().getElectionTimeOutInterval().toMillis() + "]"; } }