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=838aeb7dc36af37ae0916fd1e60f708c8be1861d;hp=c29b6a7730ced4f24374d2e4e67a650f3ed69293;hb=67d58d1ab50f3c3bbe19a96fb6f0d9d94211829f;hpb=3999969c82fa3079aa59eb960b289a1013d0e7e8 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..838aeb7dc3 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,33 @@ 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); + protected abstract K createInvariantKey(K item); + public abstract void request(); public final synchronized void updateStats(List list) { - final Long expiryTime = System.nanoTime() + lifetimeNanos; - final DataModificationTransaction trans = startTransaction(); + final DataModificationTransaction trans = startTransaction(); for (final I item : list) { - trackedItems.put(updateSingleStat(trans, item), expiryTime); + K key = updateSingleStat(trans, item); + trackedItems.put(createInvariantKey(key), 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(); }