Moving the device event handling to separate thread
Change-Id: Idfffee1ef46fda4248839854fa2d87f3db6008bb
diff --git a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
index 2b404d9..90c58b7 100644
--- a/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
+++ b/apps/dhcprelay/app/src/main/java/org/onosproject/dhcprelay/DhcpRelayManager.java
@@ -27,6 +27,7 @@
import java.util.stream.Stream;
import com.google.common.collect.ImmutableList;
+import com.google.common.collect.ImmutableSet;
import com.google.common.collect.Streams;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -94,13 +95,11 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.concurrent.Executors;
+import java.util.concurrent.ExecutorService;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import static org.onlab.util.Tools.groupedThreads;
-
-
-import com.google.common.collect.ImmutableSet;
-
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
import static org.onosproject.net.config.basics.SubjectFactories.APP_SUBJECT_FACTORY;
/**
@@ -207,6 +206,7 @@
protected boolean dhcpFpmEnabled = false;
private ScheduledExecutorService timerExecutor;
+ protected ExecutorService devEventExecutor;
protected DeviceListener deviceListener = new InternalDeviceListener();
private DhcpRelayPacketProcessor dhcpRelayPacketProcessor = new DhcpRelayPacketProcessor();
@@ -243,6 +243,9 @@
dhcpPollInterval,
TimeUnit.SECONDS);
+ devEventExecutor = newSingleThreadScheduledExecutor(
+ groupedThreads("onos/dhcprelay-dev-events", "events-%d", log));
+
modified(context);
// Enable distribute route store
@@ -266,6 +269,8 @@
compCfgService.unregisterProperties(getClass(), false);
deviceService.removeListener(deviceListener);
timerExecutor.shutdown();
+ devEventExecutor.shutdownNow();
+ devEventExecutor = null;
log.info("DHCP-RELAY Stopped");
}
@@ -619,16 +624,19 @@
@Override
public void event(DeviceEvent event) {
+ if (devEventExecutor != null) {
Device device = event.subject();
switch (event.type()) {
case DEVICE_ADDED:
- updateIgnoreVlanConfigs();
+ devEventExecutor.execute(this::updateIgnoreVlanConfigs);
break;
case DEVICE_AVAILABILITY_CHANGED:
- deviceAvailabilityChanged(device);
+ devEventExecutor.execute(() -> deviceAvailabilityChanged(device));
+ break;
default:
break;
}
+ }
}
private void deviceAvailabilityChanged(Device device) {