Fix bug in OLM during spanloss computation 77/98077/2
authorGilles Thouenon <gilles.thouenon@orange.com>
Thu, 21 Oct 2021 08:24:51 +0000 (10:24 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Fri, 28 Jan 2022 08:29:49 +0000 (09:29 +0100)
Prevent from getting NPE when OTS interface terminating the
roadm-to-roadm link under spanloss determination does not exist in the
device.
- remove invocation of getOtsInterfaceName method on an OtsPmHolder null
  object, at the origin of the NPE thrown.
  This check is superfluous since OtsPmHolder.getOtsInterfaceName() can
  not be null if OtsPmHolder is not null.
- fix typo on OtsPmHolder variable names
- adapt LOG messages consequently

JIRA: TRNSPRTPCE-172
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: Idec6fac25a33c7748ad4996e01211e04667b4fd5
(cherry picked from commit 220a7ba4f55d6c0ab5b1605b4b9d26cbcb4dcd9b)

olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java
olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils221.java

index d8fb0c615b9a2c5063b4a436bd00d7b45fd8fbe7..1e49456fed6742e011bb1e5fa7003f58eeca1f11 100644 (file)
@@ -527,34 +527,37 @@ public class OlmPowerServiceImpl implements OlmPowerService {
             String sourceTpId = link.getSrcTpId();
             String destNodeId = link.getDestNodeId();
             String destTpId = link.getDestTpid();
-            OtsPmHolder srcOtsPmHoler = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutput");
-            if (srcOtsPmHoler == null) {
-                srcOtsPmHoler = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutputOSC");
-            }
-            OtsPmHolder destOtsPmHoler = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInput");
-            if (destOtsPmHoler == null) {
-                destOtsPmHoler = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInputOSC");
+            OtsPmHolder srcOtsPmHolder = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutput");
+            if (srcOtsPmHolder == null) {
+                srcOtsPmHolder = getPmMeasurements(sourceNodeId, sourceTpId, "OpticalPowerOutputOSC");
+                if (srcOtsPmHolder == null) {
+                    LOG.warn("OTS configuration issue at {} - {}", sourceNodeId, sourceTpId);
+                    continue;
+                }
             }
-
-            if (srcOtsPmHoler.getOtsInterfaceName() == null || destOtsPmHoler.getOtsInterfaceName() == null) {
-                LOG.warn("OTS is not present for the link {}", link);
-                continue;
+            OtsPmHolder destOtsPmHolder = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInput");
+            if (destOtsPmHolder == null) {
+                destOtsPmHolder = getPmMeasurements(destNodeId, destTpId, "OpticalPowerInputOSC");
+                if (destOtsPmHolder == null) {
+                    LOG.warn("OTS configuration issue at {} - {}", destNodeId, destTpId);
+                    continue;
+                }
             }
-            spanLoss = BigDecimal.valueOf(srcOtsPmHoler.getOtsParameterVal() - destOtsPmHoler.getOtsParameterVal())
+            spanLoss = BigDecimal.valueOf(srcOtsPmHolder.getOtsParameterVal() - destOtsPmHolder.getOtsParameterVal())
                 .setScale(1, RoundingMode.HALF_UP);
             LOG.info("Spanloss Calculated as :{}={}-{}",
-                spanLoss, srcOtsPmHoler.getOtsParameterVal(), destOtsPmHoler.getOtsParameterVal());
+                spanLoss, srcOtsPmHolder.getOtsParameterVal(), destOtsPmHolder.getOtsParameterVal());
             if (spanLoss.doubleValue() > 28) {
                 LOG.warn("Span Loss is out of range of OpenROADM specifications");
             }
             if (spanLoss.intValue() <= 0) {
                 spanLoss = BigDecimal.valueOf(0);
             }
-            if (!setSpanLoss(sourceNodeId, srcOtsPmHoler.getOtsInterfaceName(), spanLoss, "TX")) {
+            if (!setSpanLoss(sourceNodeId, srcOtsPmHolder.getOtsInterfaceName(), spanLoss, "TX")) {
                 LOG.info("Setting spanLoss failed for {}", sourceNodeId);
                 return null;
             }
-            if (!setSpanLoss(destNodeId, destOtsPmHoler.getOtsInterfaceName(), spanLoss, "RX")) {
+            if (!setSpanLoss(destNodeId, destOtsPmHolder.getOtsInterfaceName(), spanLoss, "RX")) {
                 LOG.info("Setting spanLoss failed for {}", destNodeId);
                 return null;
             }
index 8927bad323a23857d0744bd35e455eea8e81da0b..a12b2f27bac03887e53b05765cb9adeb889542e6 100644 (file)
@@ -84,6 +84,9 @@ final class OlmUtils221 {
 
         InstanceIdentifier<?> resourceKeyIID =
                 findClassKeyIdentifiers(input.getResourceType(), input.getResourceIdentifier());
+        if (resourceKeyIID == null) {
+            return pmOutputBuilder;
+        }
         CurrentPmEntryKey resourceKey = new CurrentPmEntryKey(resourceKeyIID,
                 convertResourceTypeEnum(input.getResourceType()),"");
         InstanceIdentifier<CurrentPmList> iidCurrentPmList = InstanceIdentifier.create(CurrentPmList.class);
@@ -182,6 +185,10 @@ final class OlmUtils221 {
 
     private static InstanceIdentifier<?> findClassKeyIdentifiers(ResourceTypeEnum wantedResourceType,
             ResourceIdentifier wantedResourceIdentifier) {
+        if (wantedResourceIdentifier.getResourceName() == null) {
+            LOG.debug("resource {} is null", wantedResourceType);
+            return null;
+        }
         switch (wantedResourceType) {
             case Device:
                 return InstanceIdentifier.create(OrgOpenroadmDevice.class);