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;
/**
ListenableFuture<Boolean> gatherDynamicData();
+ /**
+ * @param pollTimeout handle to nearest scheduled statistics poll
+ */
+ void setPollTimeout(Timeout pollTimeout);
}
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;
private final StatisticsGatheringService statisticsGatheringService;
private final StatisticsGatheringOnTheFlyService statisticsGatheringOnTheFlyService;
+ private Timeout pollTimeout;
public StatisticsContextImpl(@CheckForNull final DeviceContext deviceContext) {
this.deviceContext = Preconditions.checkNotNull(deviceContext);
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<MultipartType> iterator, final SettableFuture<Boolean> resultFuture) {
private final ConcurrentHashMap<DeviceContext, StatisticsContext> 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
Futures.addCallback(weHaveDynamicData, new FutureCallback<Boolean>() {
@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();
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);
}
}