Ensure host events are handled outside the event loop to avoid interrupts
Change-Id: I545de9a877ca9d6d10264c4af5c199ceb69c9f3b
diff --git a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteManager.java b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteManager.java
index eb73f69..084c71e 100644
--- a/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteManager.java
+++ b/apps/route-service/app/src/main/java/org/onosproject/routeservice/impl/RouteManager.java
@@ -55,6 +55,7 @@
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
+import java.util.concurrent.Executor;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadFactory;
@@ -96,6 +97,9 @@
private ThreadFactory threadFactory;
+ protected Executor hostEventExecutor = newSingleThreadExecutor(
+ groupedThreads("rm-event-host", "%d", log));
+
@Activate
protected void activate() {
routeMonitor = new RouteMonitor(this, clusterService, storageService);
@@ -382,10 +386,12 @@
switch (event.type()) {
case HOST_ADDED:
case HOST_UPDATED:
- hostUpdated(event.subject());
+ log.trace("Scheduled host event {}", event);
+ hostEventExecutor.execute(() -> hostUpdated(event.subject()));
break;
case HOST_REMOVED:
- hostRemoved(event.subject());
+ log.trace("Scheduled host event {}", event);
+ hostEventExecutor.execute(() -> hostRemoved(event.subject()));
break;
case HOST_MOVED:
break;
diff --git a/apps/route-service/app/src/test/java/org/onosproject/routeservice/impl/RouteManagerTest.java b/apps/route-service/app/src/test/java/org/onosproject/routeservice/impl/RouteManagerTest.java
index c6c0f82..8457ac4 100644
--- a/apps/route-service/app/src/test/java/org/onosproject/routeservice/impl/RouteManagerTest.java
+++ b/apps/route-service/app/src/test/java/org/onosproject/routeservice/impl/RouteManagerTest.java
@@ -19,6 +19,7 @@
import java.util.Collection;
import java.util.Collections;
+import com.google.common.util.concurrent.MoreExecutors;
import org.junit.Before;
import org.junit.Test;
import org.onlab.packet.Ip4Address;
@@ -103,6 +104,7 @@
routeManager = new TestRouteManager();
routeManager.hostService = hostService;
+ routeManager.hostEventExecutor = MoreExecutors.directExecutor();
routeManager.clusterService = createNiceMock(ClusterService.class);
replay(routeManager.clusterService);