Moving host mobility event handler to separate thread
Change-Id: Ie394bf5b6025752df70e32d624df8dd497bfc736
diff --git a/apps/mobility/src/main/java/org/onosproject/mobility/HostMobility.java b/apps/mobility/src/main/java/org/onosproject/mobility/HostMobility.java
index 652233b..6f05750 100644
--- a/apps/mobility/src/main/java/org/onosproject/mobility/HostMobility.java
+++ b/apps/mobility/src/main/java/org/onosproject/mobility/HostMobility.java
@@ -14,10 +14,13 @@
* limitations under the License.
*/
package org.onosproject.mobility;
+import static java.util.concurrent.Executors.newSingleThreadScheduledExecutor;
+import static org.onlab.util.Tools.groupedThreads;
import static org.slf4j.LoggerFactory.getLogger;
import java.util.Collection;
import java.util.List;
+import java.util.concurrent.ExecutorService;
import org.apache.felix.scr.annotations.Activate;
import org.apache.felix.scr.annotations.Component;
@@ -64,22 +67,26 @@
protected CoreService coreService;
private ApplicationId appId;
+ private ExecutorService eventHandler;
@Activate
public void activate() {
appId = coreService.registerApplication("org.onosproject.mobility");
+ eventHandler = newSingleThreadScheduledExecutor(groupedThreads("onos/app-mobility", "event-handler"));
hostService.addListener(new InternalHostListener());
log.info("Started with Application ID {}", appId.id());
}
@Deactivate
public void deactivate() {
+ // TODO we never actually add any flow rules
flowRuleService.removeFlowRulesById(appId);
+ eventHandler.shutdown();
log.info("Stopped");
}
public class InternalHostListener
- implements HostListener {
+ implements HostListener {
@Override
public void event(HostEvent event) {
@@ -91,14 +98,12 @@
break;
case HOST_MOVED:
log.info("Host {} has moved; cleaning up.", event.subject());
- cleanup(event.subject());
+ eventHandler.execute(() -> cleanup(event.subject()));
break;
default:
break;
-
}
-
}
/**
@@ -129,12 +134,9 @@
}
}
}
-
return flowRules;
}
-
}
-
}