X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Fstatistics-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Fstatistics%2Fmanager%2FAbstractStatsTracker.java;h=e23ad0acdbe43a2603f458dd3a17b467116acd1b;hp=c29b6a7730ced4f24374d2e4e67a650f3ed69293;hb=1c79202684429691381362a27303514f8d2cb59f;hpb=2395ecb818aa01bbd90821767715b3df67b65de0 diff --git a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java index c29b6a7730..e23ad0acdb 100644 --- a/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java +++ b/opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/AbstractStatsTracker.java @@ -32,6 +32,9 @@ import com.google.common.util.concurrent.JdkFutureAdapters; abstract class AbstractStatsTracker { private static final Logger logger = LoggerFactory.getLogger(AbstractStatsTracker.class); + + private static final int WAIT_FOR_REQUEST_CYCLE = 2; + private final FutureCallback> callback = new FutureCallback>() { @Override @@ -62,15 +65,15 @@ abstract class AbstractStatsTracker { private final Map trackedItems = new HashMap<>(); private final FlowCapableContext context; - private final long lifetimeNanos; + private long requestCounter; - protected AbstractStatsTracker(final FlowCapableContext context, final long lifetimeNanos) { + protected AbstractStatsTracker(final FlowCapableContext context) { this.context = Preconditions.checkNotNull(context); - this.lifetimeNanos = lifetimeNanos; + this.requestCounter = 0; } protected final InstanceIdentifierBuilder getNodeIdentifierBuilder() { - return InstanceIdentifier.builder(getNodeIdentifier()); + return getNodeIdentifier().builder(); } protected final NodeRef getNodeRef() { @@ -89,24 +92,32 @@ abstract class AbstractStatsTracker { return context.startDataModification(); } + public final synchronized void increaseRequestCounter(){ + this.requestCounter++; + } protected abstract void cleanupSingleStat(DataModificationTransaction trans, K item); protected abstract K updateSingleStat(DataModificationTransaction trans, I item); + public abstract void request(); public final synchronized void updateStats(List list) { - final Long expiryTime = System.nanoTime() + lifetimeNanos; + final DataModificationTransaction trans = startTransaction(); for (final I item : list) { - trackedItems.put(updateSingleStat(trans, item), expiryTime); + trackedItems.put(updateSingleStat(trans, item), requestCounter); } trans.commit(); } - public final synchronized void cleanup(final DataModificationTransaction trans, long now) { + /** + * Statistics will be cleaned up if not update in last two request cycles. + * @param trans + */ + public final synchronized void cleanup(final DataModificationTransaction trans) { for (Iterator> it = trackedItems.entrySet().iterator();it.hasNext();){ Entry e = it.next(); - if (now > e.getValue()) { + if (requestCounter >= e.getValue()+WAIT_FOR_REQUEST_CYCLE) { cleanupSingleStat(trans, e.getKey()); it.remove(); }