X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2FStatisticsContextImpl.java;h=0c967c87f4281579181139f190f1ac68bc911779;hb=refs%2Fchanges%2F36%2F76236%2F27;hp=724531b94f87c2a0028065a3e045e7337e376140;hpb=2c9d952924a42a1346768a163ccab684bd0260c8;p=openflowplugin.git 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 724531b94f..0c967c87f4 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 @@ -18,15 +18,16 @@ import com.google.common.util.concurrent.ListeningExecutorService; import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Collection; -import java.util.HashSet; import java.util.List; import java.util.Objects; import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.Nonnull; import javax.annotation.Nullable; -import org.opendaylight.mdsal.common.api.TransactionChainClosedException; + +import org.opendaylight.mdsal.binding.api.TransactionChainClosedException; import org.opendaylight.mdsal.singleton.common.api.ServiceGroupIdentifier; import org.opendaylight.openflowplugin.api.ConnectionException; import org.opendaylight.openflowplugin.api.openflow.connection.ConnectionContext; @@ -45,6 +46,7 @@ import org.opendaylight.openflowplugin.impl.statistics.services.dedicated.Statis import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.common.types.rev130731.MultipartType; import org.opendaylight.yang.gen.v1.urn.opendaylight.openflow.protocol.rev130731.OfHeader; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflow.provider.config.rev160510.OpenflowProviderConfig; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -53,7 +55,7 @@ class StatisticsContextImpl implements StatisticsContext { private static final Logger LOG = LoggerFactory.getLogger(StatisticsContextImpl.class); private static final String CONNECTION_CLOSED = "Connection closed."; - private final Collection> requestContexts = new HashSet<>(); + private final Collection> requestContexts = ConcurrentHashMap.newKeySet(); private final DeviceContext deviceContext; private final DeviceState devState; private final ListeningExecutorService executorService; @@ -62,6 +64,7 @@ class StatisticsContextImpl implements StatisticsContext { private final MultipartWriterProvider statisticsWriterProvider; private final DeviceInfo deviceInfo; private final TimeCounter timeCounter = new TimeCounter(); + private final OpenflowProviderConfig config; private final long statisticsPollingInterval; private final long maximumPollingDelay; private final boolean isUsingReconciliationFramework; @@ -76,17 +79,19 @@ class StatisticsContextImpl implements StatisticsContext { StatisticsContextImpl(@Nonnull final DeviceContext deviceContext, @Nonnull final ConvertorExecutor convertorExecutor, @Nonnull final MultipartWriterProvider statisticsWriterProvider, - @Nonnull final ListeningExecutorService executorService, boolean isStatisticsPollingOn, - boolean isUsingReconciliationFramework, long statisticsPollingInterval, - long maximumPollingDelay) { + @Nonnull final ListeningExecutorService executorService, + @Nonnull final OpenflowProviderConfig config, + boolean isStatisticsPollingOn, + boolean isUsingReconciliationFramework) { this.deviceContext = deviceContext; this.devState = Preconditions.checkNotNull(deviceContext.getDeviceState()); this.executorService = executorService; this.isStatisticsPollingOn = isStatisticsPollingOn; + this.config = config; this.convertorExecutor = convertorExecutor; this.deviceInfo = deviceContext.getDeviceInfo(); - this.statisticsPollingInterval = statisticsPollingInterval; - this.maximumPollingDelay = maximumPollingDelay; + this.statisticsPollingInterval = config.getBasicTimerDelay().getValue(); + this.maximumPollingDelay = config.getMaximumTimerDelay().getValue(); this.statisticsWriterProvider = statisticsWriterProvider; this.isUsingReconciliationFramework = isUsingReconciliationFramework; @@ -151,29 +156,29 @@ class StatisticsContextImpl implements StatisticsContext { public void instantiateServiceInstance() { final List statListForCollecting = new ArrayList<>(); - if (devState.isTableStatisticsAvailable()) { + if (devState.isTableStatisticsAvailable() && config.isIsTableStatisticsPollingOn()) { statListForCollecting.add(MultipartType.OFPMPTABLE); } - if (devState.isGroupAvailable()) { + if (devState.isGroupAvailable() && config.isIsGroupStatisticsPollingOn()) { statListForCollecting.add(MultipartType.OFPMPGROUPDESC); statListForCollecting.add(MultipartType.OFPMPGROUP); } - if (devState.isMetersAvailable()) { + if (devState.isMetersAvailable() && config.isIsMeterStatisticsPollingOn()) { statListForCollecting.add(MultipartType.OFPMPMETERCONFIG); statListForCollecting.add(MultipartType.OFPMPMETER); } - if (devState.isFlowStatisticsAvailable()) { + if (devState.isFlowStatisticsAvailable() && config.isIsFlowStatisticsPollingOn()) { statListForCollecting.add(MultipartType.OFPMPFLOW); } - if (devState.isPortStatisticsAvailable()) { + if (devState.isPortStatisticsAvailable() && config.isIsPortStatisticsPollingOn()) { statListForCollecting.add(MultipartType.OFPMPPORTSTATS); } - if (devState.isQueueStatisticsAvailable()) { + if (devState.isQueueStatisticsAvailable() && config.isIsQueueStatisticsPollingOn()) { statListForCollecting.add(MultipartType.OFPMPQUEUE); } @@ -227,7 +232,7 @@ class StatisticsContextImpl implements StatisticsContext { // write end timestamp to state snapshot container Futures.addCallback(newDataGathering, new FutureCallback() { @Override - public void onSuccess(final Boolean result) { + public void onSuccess(@Nonnull final Boolean result) { StatisticsGatheringUtils.markDeviceStateSnapshotEnd(deviceInfo, deviceContext, result); }