X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=openflowplugin-impl%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fopenflowplugin%2Fimpl%2Fstatistics%2FStatisticsManagerImpl.java;h=bbc1707214ba1c9063023eb79228c9f96fa67a4a;hb=79cd16be95f1f2c501794fc77e9e4a1cb1d5260c;hp=8aa3c7aa537d248bc8b58a1cb78991f180fc450b;hpb=7f63d9b25efe493bbafc8b6d5ec4a8ad0327fa79;p=openflowplugin.git 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 8aa3c7aa53..bbc1707214 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 @@ -26,20 +26,20 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.Future; import java.util.concurrent.Semaphore; import java.util.concurrent.TimeUnit; -import javax.annotation.CheckForNull; import javax.annotation.Nonnull; import org.opendaylight.controller.sal.binding.api.BindingAwareBroker; import org.opendaylight.controller.sal.binding.api.RpcProviderRegistry; import org.opendaylight.openflowplugin.api.openflow.OFPContext; -import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext; import org.opendaylight.openflowplugin.api.openflow.device.DeviceInfo; import org.opendaylight.openflowplugin.api.openflow.device.DeviceState; import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceInitializationPhaseHandler; import org.opendaylight.openflowplugin.api.openflow.device.handlers.DeviceTerminationPhaseHandler; import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleConductor; +import org.opendaylight.openflowplugin.api.openflow.lifecycle.LifecycleService; import org.opendaylight.openflowplugin.api.openflow.rpc.ItemLifeCycleSource; import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsContext; import org.opendaylight.openflowplugin.api.openflow.statistics.StatisticsManager; +import org.opendaylight.openflowplugin.openflow.md.core.sal.convertor.ConvertorExecutor; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.ChangeStatisticsWorkModeInput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutput; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.openflowplugin.sm.control.rev150812.GetStatisticsWorkModeOutputBuilder; @@ -56,6 +56,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag private static final Logger LOG = LoggerFactory.getLogger(StatisticsManagerImpl.class); private static final long DEFAULT_STATS_TIMEOUT_SEC = 50L; + private final ConvertorExecutor convertorExecutor; private DeviceInitializationPhaseHandler deviceInitPhaseHandler; private DeviceTerminationPhaseHandler deviceTerminPhaseHandler; @@ -68,7 +69,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag private StatisticsWorkMode workMode = StatisticsWorkMode.COLLECTALL; private final Semaphore workModeGuard = new Semaphore(1, true); - private boolean shuttingDownStatisticsPolling; + private boolean isStatisticsPollingEnabled; private BindingAwareBroker.RpcRegistration controlServiceRegistration; private final LifecycleConductor conductor; @@ -78,25 +79,25 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag deviceInitPhaseHandler = handler; } - public StatisticsManagerImpl(@CheckForNull final RpcProviderRegistry rpcProviderRegistry, - final boolean shuttingDownStatisticsPolling, - final LifecycleConductor lifecycleConductor) { + public StatisticsManagerImpl(final RpcProviderRegistry rpcProviderRegistry, + final boolean isStatisticsPollingEnabled, + final LifecycleConductor lifecycleConductor, + final ConvertorExecutor convertorExecutor) { Preconditions.checkArgument(rpcProviderRegistry != null); + this.convertorExecutor = convertorExecutor; this.controlServiceRegistration = Preconditions.checkNotNull(rpcProviderRegistry.addRpcImplementation( StatisticsManagerControlService.class, this)); - this.shuttingDownStatisticsPolling = shuttingDownStatisticsPolling; + this.isStatisticsPollingEnabled = isStatisticsPollingEnabled; this.conductor = lifecycleConductor; } @Override - public void onDeviceContextLevelUp(final DeviceInfo deviceInfo) throws Exception { + public void onDeviceContextLevelUp(final DeviceInfo deviceInfo, final LifecycleService lifecycleService) throws Exception { - final DeviceContext deviceContext = Preconditions.checkNotNull(conductor.getDeviceContext(deviceInfo)); - - final StatisticsContext statisticsContext = new StatisticsContextImpl(deviceInfo, shuttingDownStatisticsPolling, conductor); + final StatisticsContext statisticsContext = new StatisticsContextImpl(deviceInfo, isStatisticsPollingEnabled, conductor, convertorExecutor, this); Verify.verify(contexts.putIfAbsent(deviceInfo, statisticsContext) == null, "StatisticsCtx still not closed for Node {}", deviceInfo.getNodeId()); - - deviceInitPhaseHandler.onDeviceContextLevelUp(deviceInfo); + lifecycleService.setStatContext(statisticsContext); + deviceInitPhaseHandler.onDeviceContextLevelUp(deviceInfo, lifecycleService); } @VisibleForTesting @@ -106,18 +107,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag final DeviceInfo deviceInfo) { if (!statisticsContext.isSchedulingEnabled()) { - LOG.debug("Disabling statistics scheduling for device: {}", deviceInfo.getNodeId()); - return; - } - - if (!deviceState.isValid()) { - LOG.debug("Session is not valid for device: {}", deviceInfo.getNodeId()); - return; - } - - if (!deviceState.isStatisticsPollingEnabled()) { - LOG.debug("Statistics polling is currently disabled for device: {}", deviceInfo.getNodeId()); - scheduleNextPolling(deviceState, deviceInfo, statisticsContext, timeCounter); + LOG.debug("Disabled statistics scheduling for device: {}", deviceInfo.getNodeId().getValue()); return; } @@ -139,7 +129,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag LOG.trace("Statistics gathering for single node was not successful.. ", throwable); calculateTimerDelay(timeCounter); if (throwable instanceof CancellationException) { - /** This often happens when something wrong with akka or DS, so closing connection will help to restart device **/ + /* This often happens when something wrong with akka or DS, so closing connection will help to restart device **/ conductor.closeConnection(deviceInfo); } else { scheduleNextPolling(deviceState, deviceInfo, statisticsContext, timeCounter); @@ -164,7 +154,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag final StatisticsContext statisticsContext, final TimeCounter timeCounter) { LOG.debug("SCHEDULING NEXT STATISTICS POLLING for device: {}", deviceInfo.getNodeId()); - if (!shuttingDownStatisticsPolling) { + if (!isStatisticsPollingEnabled) { final Timeout pollTimeout = conductor.newTimeout(timeout -> pollStatistics(deviceState, statisticsContext, timeCounter, deviceInfo), currentTimerDelay, TimeUnit.MILLISECONDS); statisticsContext.setPollTimeout(pollTimeout); } @@ -216,7 +206,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag if (workModeGuard.tryAcquire()) { final StatisticsWorkMode targetWorkMode = input.getMode(); if (!workMode.equals(targetWorkMode)) { - shuttingDownStatisticsPolling = StatisticsWorkMode.FULLYDISABLED.equals(targetWorkMode); + isStatisticsPollingEnabled = StatisticsWorkMode.FULLYDISABLED.equals(targetWorkMode); // iterate through stats-ctx: propagate mode for (Map.Entry entry : contexts.entrySet()) { switch (targetWorkMode) { @@ -253,7 +243,7 @@ public class StatisticsManagerImpl implements StatisticsManager, StatisticsManag @Override public void startScheduling(final DeviceInfo deviceInfo) { - if (shuttingDownStatisticsPolling) { + if (isStatisticsPollingEnabled) { LOG.info("Statistics are shut down for device: {}", deviceInfo.getNodeId()); return; }