Handle missing spanloss in PCE without crashing 15/103515/1
authorJonas Mårtensson <jonas.martensson@smartoptics.com>
Wed, 2 Nov 2022 10:05:07 +0000 (10:05 +0000)
committerJonas Mårtensson <jonas.martensson@smartoptics.com>
Fri, 2 Dec 2022 09:00:40 +0000 (09:00 +0000)
If spanloss is missing from OMS attributes in any span in the topology,
the PCE code crashes due to NullPointerException.

- Check for null before accessing spanloss when calculating OSNR

- Set the link to not valid when analyzing the network for path
  computation.

JIRA: TRNSPRTPCE-710

Signed-off-by: Jonas Mårtensson <jonas.martensson@smartoptics.com>
Change-Id: I746cdefc0dd79e914ea235e5ad7801b2c73fc121

pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceLink.java

index 9e28aa9bdec02f9acb68469af2dab6d777e16b9e..2d05a3e0989691eb4d65f8fd5cd54443c1fd3703 100644 (file)
@@ -173,6 +173,10 @@ public class PceLink implements Serializable {
         if (!linkConcatenationiterator.hasNext()) {
             return 0L;
         }
+        if (this.omsAttributesSpan.getSpanlossCurrent() == null) {
+            LOG.error("in PceLink : Spanloss is null");
+            return 0L;
+        }
         // power on the output of the previous ROADM (dBm)
         double pout = retrievePower(linkConcatenationiterator.next().augmentation(LinkConcatenation1.class)
             .getFiberType());
@@ -300,9 +304,14 @@ public class PceLink implements Serializable {
             LOG.error("PceLink: No Link type or opposite link is available. Link is ignored {}", linkId);
         }
         isValid = checkParams();
-        if ((this.omsAttributesSpan == null) && (this.linkType == OpenroadmLinkType.ROADMTOROADM)) {
-            isValid = false;
-            LOG.error("PceLink: Error reading Span for OMS link. Link is ignored {}", linkId);
+        if (this.linkType == OpenroadmLinkType.ROADMTOROADM) {
+            if (this.omsAttributesSpan == null) {
+                isValid = false;
+                LOG.error("PceLink: Error reading Span for OMS link. Link is ignored {}", linkId);
+            } else if (this.omsAttributesSpan.getSpanlossCurrent() == null) {
+                isValid = false;
+                LOG.error("PceLink: Error reading Spanloss for OMS link. Link is ignored {}", linkId);
+            }
         }
         if ((this.srlgList != null) && (this.srlgList.isEmpty())) {
             isValid = false;