Bug fixes for route-path programming
- Leaves should avoid going through other leaves to reach destination
- dsNextObjective store should only be purged by new master before a full reroute
- move full reroute for master change to a different threadpool from retry filters
Change-Id: I33be83bfb90d5848cfe94ed0fcdc17f2cca6d73f
diff --git a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
index 864a924..0322201 100644
--- a/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
+++ b/apps/segmentrouting/app/src/main/java/org/onosproject/segmentrouting/SegmentRoutingManager.java
@@ -519,6 +519,7 @@
deviceListener = null;
groupHandlerMap.forEach((k, v) -> v.shutdown());
groupHandlerMap.clear();
+ defaultRoutingHandler.shutdown();
dsNextObjStore.destroy();
vlanNextObjStore.destroy();
@@ -1284,7 +1285,14 @@
.forEach(entry -> entry.getValue().cleanUpForNeighborDown(device.id()));
}
+ /**
+ * Purge the destinationSet nextObjective store of entries with this device
+ * as key. Erases app-level knowledge of hashed groups in this device.
+ *
+ * @param devId the device identifier
+ */
void purgeHashedNextObjectiveStore(DeviceId devId) {
+ log.debug("Purging hashed next-obj store for dev:{}", devId);
dsNextObjStore.entrySet().stream()
.filter(entry -> entry.getKey().deviceId().equals(devId))
.forEach(entry -> dsNextObjStore.remove(entry.getKey()));