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=7df80af58a717e99c1a226c3bd6cbb17ccd92afc;hb=ebb4158697741bc88fde22ac5f75edf65869506f;hp=6aa76508fc2323094a497895cad4d3d7a2bdd3d0;hpb=cf5be659d906cc80d52647cb516bbab435156742;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 6aa76508fc..7df80af58a 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,6 +8,10 @@ package org.opendaylight.controller.cluster.raft; +import com.google.common.base.Stopwatch; +import scala.concurrent.duration.FiniteDuration; + +import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; public class FollowerLogInformationImpl implements FollowerLogInformation{ @@ -18,21 +22,39 @@ public class FollowerLogInformationImpl implements FollowerLogInformation{ private final AtomicLong matchIndex; + private final Stopwatch stopwatch; + + private final long followerTimeoutMillis; + public FollowerLogInformationImpl(String id, AtomicLong nextIndex, - AtomicLong matchIndex) { + AtomicLong matchIndex, FiniteDuration followerTimeoutDuration) { this.id = id; this.nextIndex = nextIndex; this.matchIndex = matchIndex; + this.stopwatch = new Stopwatch(); + this.followerTimeoutMillis = followerTimeoutDuration.toMillis(); } public long incrNextIndex(){ return nextIndex.incrementAndGet(); } + @Override public long decrNextIndex() { + return nextIndex.decrementAndGet(); + } + + @Override public void setNextIndex(long nextIndex) { + this.nextIndex.set(nextIndex); + } + public long incrMatchIndex(){ return matchIndex.incrementAndGet(); } + @Override public void setMatchIndex(long matchIndex) { + this.matchIndex.set(matchIndex); + } + public String getId() { return id; } @@ -45,4 +67,24 @@ public class FollowerLogInformationImpl implements FollowerLogInformation{ return matchIndex; } + @Override + public boolean isFollowerActive() { + long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS); + return (stopwatch.isRunning()) && (elapsed <= followerTimeoutMillis); + } + + @Override + public void markFollowerActive() { + if (stopwatch.isRunning()) { + stopwatch.reset(); + } + stopwatch.start(); + } + + @Override + public void markFollowerInActive() { + if (stopwatch.isRunning()) { + stopwatch.stop(); + } + } }