Add protection on Xponder-in/out link creation 30/95130/3
authorChristophe Betoule <christophe.betoule@orange.com>
Thu, 11 Feb 2021 09:30:00 +0000 (10:30 +0100)
committerGilles Thouenon <gilles.thouenon@orange.com>
Tue, 16 Feb 2021 19:57:02 +0000 (20:57 +0100)
- 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 <christophe.betoule@orange.com>
Co-authored-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: I0f5ce99078872a487dfcd28f9f29f522c329079c

networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/NetworkUtilsImpl.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/Rdm2XpdrLink.java

index d1fe74701b5a954633c7155cef8ac60e9e75fdc0..24aa97a74367ee4fceda1afba34aa423865cff56 100644 (file)
@@ -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.<InitXpdrRdmLinksOutput>failed().buildFuture();
         }
     }
 
     @Override
     public ListenableFuture<RpcResult<InitRdmXpdrLinksOutput>> 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.<InitRdmXpdrLinksOutput>failed().buildFuture();
         }
     }
index c7aa9958d4684c7aee8de82bcd1952a08e48dfe7..e2447a69ed728a8d621f8ee195a346f707786c08 100644 (file)
@@ -25,7 +25,6 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkut
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Link1Builder;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev191129.AdminStates;
-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;
@@ -68,12 +67,16 @@ final class Rdm2XpdrLink {
         TerminationPoint xpdrTp = getTpofNode(srcNode, srcTp, dataBroker);
         TerminationPoint rdmTp = getTpofNode(destNode, destTp, dataBroker);
 
-        Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, xpdrTp,
-                rdmTp).build();
+        NetworkBuilder networkBldr = createNetworkBuilder(srcNode, srcTp, destNode, destTp, false, xpdrTp, rdmTp);
+        Network network;
+        if (networkBldr == null) {
+            return false;
+        }
+        network = networkBldr.build();
         InstanceIdentifier.InstanceIdentifierBuilder<Network> 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<? extends @NonNull CommitInfo> commit = wrtx.commit();
 
@@ -98,13 +101,17 @@ final class Rdm2XpdrLink {
         TerminationPoint xpdrTp = getTpofNode(destNode, destTp, dataBroker);
         TerminationPoint rdmTp = getTpofNode(srcNode, srcTp, dataBroker);
 
-        Network topoNetowkLayer = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, xpdrTp,
-                rdmTp).build();
+        NetworkBuilder networkBldr = createNetworkBuilder(srcNode, srcTp, destNode, destTp, true, xpdrTp, rdmTp);
+        Network network;
+        if (networkBldr == null) {
+            return false;
+        }
+        network = networkBldr.build();
         InstanceIdentifier.InstanceIdentifierBuilder<Network> 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<? extends @NonNull CommitInfo> commit = wrtx.commit();
         try {
             commit.get();
@@ -119,6 +126,9 @@ final class Rdm2XpdrLink {
 
     private static NetworkBuilder createNetworkBuilder(String srcNode, String srcTp, String destNode, String destTp,
         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) {
@@ -160,8 +170,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));