Ensures internal link state is up to date on a restarted ONOS instance. Also fixes an NPE in FpmManager.
Change-Id: Idb0df0ef961c6bb2f3b2c3dc72957af8a4987e1b
diff --git a/src/main/java/org/onosproject/segmentrouting/LinkHandler.java b/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
index 2961e50..c643991 100644
--- a/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
+++ b/src/main/java/org/onosproject/segmentrouting/LinkHandler.java
@@ -71,6 +71,7 @@
.withTimestampProvider((k, v) -> new WallClockTimestamp())
.build();
log.trace("Current size {}", downedPortStore.size());
+ init();
}
/**
@@ -85,6 +86,15 @@
}
/**
+ * Initialize LinkHandler.
+ */
+ private void init() {
+ log.info("Loading stored links");
+ srManager.linkService.getActiveLinks()
+ .forEach(link -> processLinkAdded(link));
+ }
+
+ /**
* Preprocessing of added link before being sent for route-path handling.
* Also performs post processing of link.
*
@@ -95,8 +105,8 @@
if (!isLinkValid(link)) {
return;
}
- if (!srManager.deviceConfiguration
- .isConfigured(link.src().deviceId())) {
+ if (srManager.deviceConfiguration == null ||
+ !srManager.deviceConfiguration.isConfigured(link.src().deviceId())) {
updateSeenLink(link, true);
// XXX revisit - what about devicePortMap
log.warn("Source device of this link is not configured.. "
@@ -262,6 +272,10 @@
return false;
}
DeviceConfiguration devConfig = srManager.deviceConfiguration;
+ if (devConfig == null) {
+ log.warn("Cannot check validity of link without device config");
+ return true;
+ }
try {
if (!devConfig.isEdgeDevice(srcId)
&& !devConfig.isEdgeDevice(dstId)) {