From 8432cc3566be26587dc6daec81b43b16343d924a Mon Sep 17 00:00:00 2001 From: Sovietaced <Sovietaced@gmail.com> Date: Wed, 26 Jun 2013 14:02:10 -0700 Subject: [PATCH] Patch for issue #406 --- .../core/internal/Controller.java | 1 - .../perfmon/PerfMonDataResource.java | 6 ++++++ .../perfmon/PktInProcessingTime.java | 14 ++++++++++---- 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/net/floodlightcontroller/core/internal/Controller.java b/src/main/java/net/floodlightcontroller/core/internal/Controller.java index 39565832f..221fe34fa 100644 --- a/src/main/java/net/floodlightcontroller/core/internal/Controller.java +++ b/src/main/java/net/floodlightcontroller/core/internal/Controller.java @@ -1804,7 +1804,6 @@ public class Controller implements IFloodlightProviderService, // Get the starting time (overall and per-component) of // the processing chain for this packet if performance // monitoring is turned on - pktinProcTime.bootstrap(listeners); pktinProcTime.recordStartTimePktIn(); Command cmd; for (IOFMessageListener listener : listeners) { diff --git a/src/main/java/net/floodlightcontroller/perfmon/PerfMonDataResource.java b/src/main/java/net/floodlightcontroller/perfmon/PerfMonDataResource.java index 2d0aad0c1..72180c4bd 100644 --- a/src/main/java/net/floodlightcontroller/perfmon/PerfMonDataResource.java +++ b/src/main/java/net/floodlightcontroller/perfmon/PerfMonDataResource.java @@ -37,6 +37,12 @@ public class PerfMonDataResource extends ServerResource { get(IPktInProcessingTimeService.class.getCanonicalName()); setStatus(Status.SUCCESS_OK, "OK"); + // If the user is requesting this they must think that it is enabled, + // so lets enable it to prevent from erroring out + if (!pktinProcTime.isEnabled()){ + pktinProcTime.setEnabled(true); + logger.warn("Requesting performance monitor data when performance monitor is disabled. Turning it on"); + } // Allocate output object if (pktinProcTime.isEnabled()) { CumulativeTimeBucket ctb = pktinProcTime.getCtb(); diff --git a/src/main/java/net/floodlightcontroller/perfmon/PktInProcessingTime.java b/src/main/java/net/floodlightcontroller/perfmon/PktInProcessingTime.java index c27f16217..366721120 100644 --- a/src/main/java/net/floodlightcontroller/perfmon/PktInProcessingTime.java +++ b/src/main/java/net/floodlightcontroller/perfmon/PktInProcessingTime.java @@ -26,6 +26,7 @@ import java.util.List; import java.util.Map; import net.floodlightcontroller.core.FloodlightContext; +import net.floodlightcontroller.core.IFloodlightProviderService; import net.floodlightcontroller.core.IOFMessageListener; import net.floodlightcontroller.core.IOFSwitch; import net.floodlightcontroller.core.annotations.LogMessageCategory; @@ -37,6 +38,7 @@ import net.floodlightcontroller.core.module.IFloodlightService; import net.floodlightcontroller.restserver.IRestApiService; import org.openflow.protocol.OFMessage; +import org.openflow.protocol.OFType; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -69,6 +71,7 @@ public class PktInProcessingTime implements IFloodlightModule, IPktInProcessingTimeService { + protected IFloodlightProviderService floodlightProvider; // Our dependencies private IRestApiService restApi; @@ -99,19 +102,19 @@ public class PktInProcessingTime @Override public void bootstrap(List<IOFMessageListener> listeners) { - if (!isInited) { ctb = new CumulativeTimeBucket(listeners); - isInited = true; - } } @Override public boolean isEnabled() { - return isEnabled && isInited; + return isEnabled; } @Override public void setEnabled(boolean enabled) { + if(enabled){ + bootstrap(floodlightProvider.getListeners().get(OFType.PACKET_IN)); + } this.isEnabled = enabled; logger.debug("Setting module to " + isEnabled); } @@ -191,12 +194,15 @@ public class PktInProcessingTime Collection<Class<? extends IFloodlightService>> l = new ArrayList<Class<? extends IFloodlightService>>(); l.add(IRestApiService.class); + l.add(IFloodlightProviderService.class); return l; } @Override public void init(FloodlightModuleContext context) throws FloodlightModuleException { + floodlightProvider = context + .getServiceImpl(IFloodlightProviderService.class); restApi = context.getServiceImpl(IRestApiService.class); } -- GitLab