Clean up routes when the ONOS node they were sourced from goes down
Change-Id: I1b70e087b64404bf92e6251d18f3c85791e30583
diff --git a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
index 6ab1f03..267bb69 100644
--- a/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
+++ b/incubator/net/src/main/java/org/onosproject/incubator/net/routing/impl/RouteManager.java
@@ -24,6 +24,7 @@
import org.apache.felix.scr.annotations.Service;
import org.onlab.packet.IpAddress;
import org.onlab.packet.IpPrefix;
+import org.onosproject.cluster.ClusterService;
import org.onosproject.incubator.net.routing.InternalRouteEvent;
import org.onosproject.incubator.net.routing.NextHop;
import org.onosproject.incubator.net.routing.ResolvedRoute;
@@ -41,6 +42,7 @@
import org.onosproject.net.host.HostEvent;
import org.onosproject.net.host.HostListener;
import org.onosproject.net.host.HostService;
+import org.onosproject.store.service.StorageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -81,8 +83,16 @@
@Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
protected HostService hostService;
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected ClusterService clusterService;
+
+ @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY)
+ protected StorageService storageService;
+
private ResolvedRouteStore resolvedRouteStore;
+ private RouteMonitor routeMonitor;
+
@GuardedBy(value = "this")
private Map<RouteListener, ListenerQueue> listeners = new HashMap<>();
@@ -90,6 +100,7 @@
@Activate
protected void activate() {
+ routeMonitor = new RouteMonitor(this, clusterService, storageService);
threadFactory = groupedThreads("onos/route", "listener-%d", log);
resolvedRouteStore = new DefaultResolvedRouteStore();
@@ -104,6 +115,7 @@
@Deactivate
protected void deactivate() {
+ routeMonitor.shutdown();
listeners.values().forEach(ListenerQueue::stop);
routeStore.unsetDelegate(delegate);