From 0fe11ab272d71ec93456778b8293818b597e1c9d Mon Sep 17 00:00:00 2001 From: Christophe Betoule Date: Thu, 11 Feb 2021 10:30:00 +0100 Subject: [PATCH] Add protection on Xponder-in/out link creation - avoid NPE when attempting to create an xponder-in/out link terminating on an unexisting TP - remove unnecessary log message JIRA: TRNSPRTPCE-397 Signed-off-by: Christophe Betoule Co-authored-by: Gilles Thouenon Change-Id: I0f5ce99078872a487dfcd28f9f29f522c329079c (cherry picked from commit d48474417b7498e4b1ca09dc61fa008cdd9ca95a) --- .../networkmodel/NetworkUtilsImpl.java | 3 +++ .../networkmodel/Rdm2XpdrLink.java | 27 +++++++++++++------ 2 files changed, 22 insertions(+), 8 deletions(-) diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java index d1fe74701..24aa97a74 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java @@ -119,18 +119,21 @@ public class NetworkUtilsImpl implements TransportpceNetworkutilsService { .success(new InitXpdrRdmLinksOutputBuilder().setResult("Xponder Roadm Link created successfully")) .buildFuture(); } else { + LOG.error("init-xpdr-rdm-links rpc failed due to a bad input parameter"); return RpcResultBuilder.failed().buildFuture(); } } @Override public ListenableFuture> initRdmXpdrLinks(InitRdmXpdrLinksInput input) { + LOG.info("Roadm to Xpdr links rpc called"); boolean createRdmXpdrLinks = Rdm2XpdrLink.createRdmXpdrLinks(input.getLinksInput(), this.dataBroker); if (createRdmXpdrLinks) { return RpcResultBuilder .success(new InitRdmXpdrLinksOutputBuilder().setResult("Roadm Xponder links created successfully")) .buildFuture(); } else { + LOG.error("init-rdm-xpdr-links rpc failed due to a bad input parameter"); return RpcResultBuilder.failed().buildFuture(); } } diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java index a49303462..449a4c6cc 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java @@ -23,7 +23,6 @@ import org.opendaylight.transportpce.networkmodel.util.LinkIdUtil; import org.opendaylight.transportpce.networkmodel.util.TopologyUtils; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev170818.links.input.grouping.LinksInput; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.Link1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.TerminationPoint1Builder; import org.opendaylight.yang.gen.v1.http.org.openroadm.network.topology.rev200529.networks.network.node.termination.point.XpdrNetworkAttributesBuilder; @@ -64,12 +63,17 @@ final class Rdm2XpdrLink { String destTp = linksInput.getTerminationPointNum(); // update tail-equipment-id for tp of link TerminationPoint xpdrTp = getTpofNode(srcNode, srcTp, dataBroker); + TerminationPoint rdmTp = getTpofNode(destNode, destTp, dataBroker); - Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, xpdrTp).build(); + NetworkBuilder networkBldr = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, xpdrTp, rdmTp); + if (networkBldr == null) { + return false; + } + Network network = networkBldr.build(); InstanceIdentifier.InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); WriteTransaction wrtx = dataBroker.newWriteOnlyTransaction(); - wrtx.merge(LogicalDatastoreType.CONFIGURATION, nwIID.build(), topoNetowkLayer); + wrtx.merge(LogicalDatastoreType.CONFIGURATION, nwIID.build(), network); FluentFuture commit = wrtx.commit(); @@ -92,13 +96,18 @@ final class Rdm2XpdrLink { String destTp = new StringBuilder("XPDR").append(linksInput.getXpdrNum()).append("-NETWORK") .append(linksInput.getNetworkNum()).toString(); TerminationPoint xpdrTp = getTpofNode(destNode, destTp, dataBroker); + TerminationPoint rdmTp = getTpofNode(destNode, destTp, dataBroker); - Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, xpdrTp).build(); + NetworkBuilder networkBldr = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, xpdrTp, rdmTp); + if (networkBldr == null) { + return false; + } + Network network = networkBldr.build(); InstanceIdentifier.InstanceIdentifierBuilder nwIID = InstanceIdentifier.builder(Networks.class).child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID))); WriteTransaction wrtx = dataBroker.newWriteOnlyTransaction(); - wrtx.merge(LogicalDatastoreType.CONFIGURATION, nwIID.build(), topoNetowkLayer); + wrtx.merge(LogicalDatastoreType.CONFIGURATION, nwIID.build(), network); FluentFuture commit = wrtx.commit(); try { commit.get(); @@ -112,7 +121,10 @@ final class Rdm2XpdrLink { } private static NetworkBuilder createNetworkBuilder(String srcNode, String srcTp, String destNode, String destTp, - boolean isXponderInput, TerminationPoint xpdrTp) { + boolean isXponderInput, TerminationPoint xpdrTp, TerminationPoint rdmTp) { + if (xpdrTp == null || rdmTp == null) { + return null; + } //update tp of nodes TerminationPointBuilder xpdrTpBldr = new TerminationPointBuilder(xpdrTp); if (xpdrTpBldr.augmentation(TerminationPoint1.class) != null) { @@ -145,8 +157,7 @@ final class Rdm2XpdrLink { LinkBuilder linkBuilder = TopologyUtils.createLink(srcNode, destNode, srcTp, destTp, null) .addAugmentation(lnk2bldr.build()); - LOG.info("Link id in the linkbldr {}", linkBuilder.getLinkId()); - LOG.info("Link with oppo link {}", linkBuilder.augmentation(Link1.class)); + LOG.info("Creating Link with id {}", linkBuilder.getLinkId()); Link link = linkBuilder.build(); Network1Builder nwBldr1 = new Network1Builder().setLink(ImmutableMap.of(link.key(),link)); -- 2.36.6