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=5bf37d6534e5b7b38e5664f67b2dbf0d2d86f113;hb=6e6659e77f3e07e157c81332b367dbbd05d21f2b;hp=5525d75b7dcf3b6ec2d2ddcaca32f3b59d518d70;hpb=f12d62d2dc28a883c1f1b38df7d72a9142c2abfb;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 5525d75b7d..5bf37d6534 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 @@ -28,6 +28,8 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { private short payloadVersion = -1; + private FollowerState state = FollowerState.VOTING; + public FollowerLogInformationImpl(String id, long matchIndex, RaftActorContext context) { this.id = id; this.nextIndex = context.getCommitIndex(); @@ -87,6 +89,10 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public boolean isFollowerActive() { + if(state == FollowerState.VOTING_NOT_INITIALIZED) { + return false; + } + long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS); return (stopwatch.isRunning()) && (elapsed <= context.getConfigParams().getElectionTimeOutInterval().toMillis()); @@ -114,6 +120,10 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { @Override public boolean okToReplicate() { + if(state == FollowerState.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() @@ -134,17 +144,6 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { lastReplicatedStopwatch.start(); } - @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(); - } - @Override public short getPayloadVersion() { return payloadVersion; @@ -154,4 +153,27 @@ public class FollowerLogInformationImpl implements FollowerLogInformation { public void setPayloadVersion(short payloadVersion) { this.payloadVersion = payloadVersion; } + + @Override + public boolean canParticipateInConsensus() { + return state == FollowerState.VOTING; + } + + @Override + public void setFollowerState(FollowerState state) { + this.state = state; + } + + @Override + public FollowerState getFollowerState() { + return state; + } + + @Override + public String toString() { + return "FollowerLogInformationImpl [id=" + id + ", nextIndex=" + nextIndex + ", matchIndex=" + matchIndex + + ", lastReplicatedIndex=" + lastReplicatedIndex + ", state=" + state + ", stopwatch=" + + stopwatch.elapsed(TimeUnit.MILLISECONDS) + ", followerTimeoutMillis=" + + context.getConfigParams().getElectionTimeOutInterval().toMillis() + "]"; + } }