From 220a7ba4f55d6c0ab5b1605b4b9d26cbcb4dcd9b Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Thu, 21 Oct 2021 10:24:51 +0200 Subject: [PATCH] Fix bug in OLM during spanloss computation 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 Change-Id: Idec6fac25a33c7748ad4996e01211e04667b4fd5 --- .../olm/service/OlmPowerServiceImpl.java | 33 ++++++++++--------- .../transportpce/olm/util/OlmUtils221.java | 7 ++++ 2 files changed, 25 insertions(+), 15 deletions(-) diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java index 4db9a6102..6f2431a34 100644 --- a/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java +++ b/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java @@ -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; } diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils221.java b/olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils221.java index cca27425d..45e0673a3 100644 --- a/olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils221.java +++ b/olm/src/main/java/org/opendaylight/transportpce/olm/util/OlmUtils221.java @@ -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 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); -- 2.36.6