From: Martin Bobak Date: Thu, 4 Jun 2015 14:03:34 +0000 (+0200) Subject: BUG-3580: statistics teardown improvement X-Git-Tag: release/beryllium~211 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=46e655a9d85899bd00a8b5ce4f0fc18710d9ab18;p=openflowplugin.git BUG-3580: statistics teardown improvement - statistics context cancels next scheduled statistics poll Change-Id: I3a4c1fb63d32f8ecc660da38455284bb142a62c6 Signed-off-by: Martin Bobak (cherry picked from commit c8b1875c9f8dcb4f5a4db29b33285990abb1149b) --- diff --git a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/statistics/StatisticsContext.java b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/statistics/StatisticsContext.java index a9f8182591..29f775f128 100644 --- a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/statistics/StatisticsContext.java +++ b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/statistics/StatisticsContext.java @@ -9,6 +9,7 @@ package org.opendaylight.openflowplugin.api.openflow.statistics; import com.google.common.util.concurrent.ListenableFuture; +import io.netty.util.Timeout; import org.opendaylight.openflowplugin.api.openflow.device.RequestContextStack; /** @@ -18,4 +19,8 @@ public interface StatisticsContext extends RequestContextStack, AutoCloseable { ListenableFuture gatherDynamicData(); + /** + * @param pollTimeout handle to nearest scheduled statistics poll + */ + void setPollTimeout(Timeout pollTimeout); } diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java index b831668fba..f54ef5480f 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsContextImpl.java @@ -14,6 +14,7 @@ import com.google.common.util.concurrent.FutureCallback; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.SettableFuture; +import io.netty.util.Timeout; import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; @@ -48,6 +49,7 @@ public class StatisticsContextImpl implements StatisticsContext { private final StatisticsGatheringService statisticsGatheringService; private final StatisticsGatheringOnTheFlyService statisticsGatheringOnTheFlyService; + private Timeout pollTimeout; public StatisticsContextImpl(@CheckForNull final DeviceContext deviceContext) { this.deviceContext = Preconditions.checkNotNull(deviceContext); @@ -133,6 +135,14 @@ public class StatisticsContextImpl implements StatisticsContext { for (final RequestContext requestContext : requestContexts) { RequestContextUtil.closeRequestContextWithRpcError(requestContext, CONNECTION_CLOSED); } + if (null != pollTimeout && !pollTimeout.isExpired()) { + pollTimeout.cancel(); + } + } + + @Override + public void setPollTimeout(Timeout pollTimeout) { + this.pollTimeout = pollTimeout; } void statChainFuture(final Iterator iterator, final SettableFuture resultFuture) { diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImpl.java index 9ab662d529..20ff898d37 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/statistics/StatisticsManagerImpl.java @@ -37,7 +37,6 @@ public class StatisticsManagerImpl implements StatisticsManager { private final ConcurrentHashMap contexts = new ConcurrentHashMap<>(); - private static final long basicTimerDelay = 3000; private static long currentTimerDelay = basicTimerDelay; private static long maximumTimerDelay = 900000; //wait max 15 minutes for next statistics @@ -61,7 +60,7 @@ public class StatisticsManagerImpl implements StatisticsManager { Futures.addCallback(weHaveDynamicData, new FutureCallback() { @Override public void onSuccess(final Boolean statisticsGathered) { - if (statisticsGathered.booleanValue()) { + if (statisticsGathered) { //there are some statistics on device worth gathering contexts.put(deviceContext, statisticsContext); final TimeCounter timeCounter = new TimeCounter(); @@ -121,12 +120,13 @@ public class StatisticsManagerImpl implements StatisticsManager { final StatisticsContext statisticsContext, final TimeCounter timeCounter) { if (null != hashedWheelTimer) { - hashedWheelTimer.newTimeout(new TimerTask() { + Timeout pollTimeout = hashedWheelTimer.newTimeout(new TimerTask() { @Override public void run(final Timeout timeout) throws Exception { pollStatistics(deviceContext, statisticsContext, timeCounter); } }, currentTimerDelay, TimeUnit.MILLISECONDS); + statisticsContext.setPollTimeout(pollTimeout); } }