Fix ConsistentMapException.Interrupted and NullPointerException
- Moving time-consuming packet processing to a separate thread
- Re-use the group information when dealing groupMissing instead of query again
Change-Id: I01f1b43260f22dcb969a105f16d04d79c722146e
diff --git a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
index 54c3eee..dc58dcc 100644
--- a/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
+++ b/providers/host/src/main/java/org/onosproject/provider/host/impl/HostLocationProvider.java
@@ -176,6 +176,7 @@
private int probeInitDelayMs = 1000;
ExecutorService eventHandler;
+ private ExecutorService packetHandler;
private ScheduledExecutorService hostProber;
/**
@@ -190,6 +191,8 @@
cfgService.registerProperties(getClass());
appId = coreService.registerApplication("org.onosproject.provider.host");
eventHandler = newSingleThreadScheduledExecutor(groupedThreads("onos/host-loc-provider", "event-handler", log));
+ packetHandler = newSingleThreadScheduledExecutor(groupedThreads("onos/host-loc-provider",
+ "packet-handler", log));
hostProber = newScheduledThreadPool(32, groupedThreads("onos/host-loc-probe", "%d", log));
providerService = providerRegistry.register(this);
packetService.addProcessor(processor, PacketProcessor.advisor(1));
@@ -210,6 +213,7 @@
packetService.removeProcessor(processor);
deviceService.removeListener(deviceListener);
eventHandler.shutdown();
+ packetHandler.shutdown();
hostProber.shutdown();
providerService = null;
log.info("Stopped");
@@ -510,6 +514,10 @@
@Override
public void process(PacketContext context) {
+ packetHandler.execute(() -> processPacketInternal(context));
+ }
+
+ private void processPacketInternal(PacketContext context) {
if (context == null) {
return;
}