Manage low order otn services over multiple ODU4 35/97835/17
authorGilles Thouenon <gilles.thouenon@orange.com>
Wed, 6 Oct 2021 09:59:47 +0000 (11:59 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Thu, 9 Dec 2021 09:32:30 +0000 (10:32 +0100)
- adapt renderer to transmit in the notification the list of supported
ODU4 links
- update updateOtnLinks method in network module to also transmit in
this case the list of supporting ODU4 links

JIRA: TRNSPRTPCE-541
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: Ib5bf4aeac21a87ba9b7a7fe8f1c41833e57b475b

networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java
networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java
renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java
servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java

index 349b45ec9635b40f7db706ac2375ad6e10f4ad5f..5a9d3c3757722f940ea2d523e2f67f61a4296e0a 100644 (file)
@@ -98,7 +98,11 @@ public interface NetworkModelService {
      * otu link.
      *
      * @param link
-     *     link containing termination points to be updated
+     *     link containing termination points to be updated (used for use
+     *     case with a single supported link)
+     * @param supportedLinks
+     *     list of link-id supported the service (used for use case with
+     *     several supported links)
      * @param serviceRate
      *     Service rate may be 1G, 10G, 100G or 400G
      * @param tribPortNb
@@ -110,8 +114,8 @@ public interface NetworkModelService {
      * @param isDeletion
      *     True indicates if the low-order otn service must be deleted
      */
-    void updateOtnLinks(Link link, Uint32 serviceRate, Short tribPortNb, Short minTribSoltNb, Short maxTribSoltNb,
-            boolean isDeletion);
+    void updateOtnLinks(Link link, List<String> supportedLinks, Uint32 serviceRate, Short tribPortNb,
+            Short minTribSoltNb, Short maxTribSoltNb, boolean isDeletion);
 
     /**
      * Update otn links from otn-topology.
@@ -119,7 +123,8 @@ public interface NetworkModelService {
      * of the direct parent otu link.
      *
      * @param supportedLinks
-     *     list of link-id supported the service (used when more than one supported link)
+     *     list of link-id supported the service (used for use case with
+     *     several supported links)
      * @param isDeletion
      *     True indicates if the low-order otn service must be deleted
      */
index ae68319318f94212b50ef12a85ecb87df43ca607..6b067d2ae2a91731571fbaf1956bd962ce6849f9 100644 (file)
@@ -543,22 +543,42 @@ public class NetworkModelServiceImpl implements NetworkModelService {
     @Override
     public void updateOtnLinks(
         org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link
-            notifLink, Uint32 serviceRate, Short tribPortNb, Short minTribSoltNb, Short maxTribSlotNb,
-            boolean isDeletion) {
+            notifLink, List<String> suppLinks, Uint32 serviceRate, Short tribPortNb, Short minTribSoltNb,
+            Short maxTribSlotNb, boolean isDeletion) {
 
-        LinkTp atermination = new LinkTpBuilder()
-            .setNodeId(notifLink.getATermination().getNodeId())
-            .setTpId(notifLink.getATermination().getTpId())
-            .build();
-        LinkTp ztermination = new LinkTpBuilder()
-            .setNodeId(notifLink.getZTermination().getNodeId())
-            .setTpId(notifLink.getZTermination().getTpId())
-            .build();
         List<LinkTp> linkTerminations = new ArrayList<>();
-        linkTerminations.add(atermination);
-        linkTerminations.add(ztermination);
-
-        List<Link> supportedOdu4Links = getSupportingOdu4Links(linkTerminations, serviceRate);
+        List<Link> supportedOdu4Links = null;
+        if (notifLink != null) {
+            // retreive termination-points to be updated
+            linkTerminations.add(new LinkTpBuilder()
+                    .setNodeId(notifLink.getATermination().getNodeId())
+                    .setTpId(notifLink.getATermination().getTpId())
+                    .build());
+            linkTerminations.add(new LinkTpBuilder()
+                    .setNodeId(notifLink.getZTermination().getNodeId())
+                    .setTpId(notifLink.getZTermination().getTpId())
+                    .build());
+            // retreive supported links
+            supportedOdu4Links = getSupportingOdu4Links(linkTerminations, serviceRate);
+        } else if (suppLinks != null) {
+             // retreive supported links
+            List<LinkId> linkIdList = new ArrayList<>();
+            if (suppLinks != null) {
+                suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk)));
+            }
+            supportedOdu4Links = getOtnLinks(linkIdList);
+            // retreive termination-points to be updated
+            for (Link link : supportedOdu4Links) {
+                LinkTp atermination = new LinkTpBuilder()
+                    .setNodeId(link.getSource().getSourceNode().getValue())
+                    .setTpId(link.getSource().getSourceTp().getValue())
+                    .build();
+                linkTerminations.add(atermination);
+            }
+        } else {
+            LOG.error("Impossible to update OTN links and their associated termination points in otn-topology");
+            return;
+        }
         List<TerminationPoint> tps = getOtnNodeTps(linkTerminations);
         TopologyShard otnTopologyShard;
         otnTopologyShard = OpenRoadmOtnTopology.updateOtnLinks(supportedOdu4Links, tps, serviceRate, tribPortNb,
@@ -723,8 +743,7 @@ public class NetworkModelServiceImpl implements NetworkModelService {
         List<TerminationPoint> tps = new ArrayList<>();
         for (LinkTp linkTp : linkTerminations) {
             String tp = linkTp.getTpId();
-            String nodeId = new StringBuilder(linkTp.getNodeId()).append("-")
-                .append(tp.split("-")[0]).toString();
+            String nodeId = formatNodeName(linkTp.getNodeId(), tp);
             InstanceIdentifier<TerminationPoint> iiTp = InstanceIdentifier.builder(Networks.class)
                 .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID)))
                 .child(Node.class, new NodeKey(new NodeId(nodeId)))
@@ -745,13 +764,7 @@ public class NetworkModelServiceImpl implements NetworkModelService {
                 LOG.error("error getting node termination points from the datastore");
             }
         }
-        if (tps.isEmpty()) {
-            LOG.warn("returning null");
-            return null;
-        } else {
-            LOG.info("returning tps = {}", tps.toString());
-            return tps;
-        }
+        return tps;
     }
 
     private void deleteLinks(List<Link> links) {
@@ -851,6 +864,12 @@ public class NetworkModelServiceImpl implements NetworkModelService {
         return new StringBuilder(nodeId).append("-").append(tpId.split("-")[0]).toString();
     }
 
+    private static String formatNodeName(String nodeName, String tpName) {
+        return nodeName.contains("-XPDR")
+            ? nodeName
+            : new StringBuilder(nodeName).append("-").append(tpName.split("-")[0]).toString();
+    }
+
     @SuppressFBWarnings(
             value = "UPM_UNCALLED_PRIVATE_METHOD",
             justification = "false positive, this method is used by public updateOpenRoadmNetworkTopology")
index bffe901a3de5e892f29c4adb7d1738ab7023e059..fcd67d1cb2d4ba3803a8a66d3a80926e3a41dc68 100644 (file)
@@ -191,7 +191,7 @@ public class DeviceRendererServiceImpl implements DeviceRendererService {
                             otnLinkTps.add(new LinkTpBuilder().setNodeId(nodeId).setTpId(srcTp).build());
                         } else {
                             createdOduInterfaces.add(this.openRoadmInterfaceFactory.createOpenRoadmOdu4HOInterface(
-                                nodeId, srcTp, false, apiInfoA, apiInfoZ, PT_07));
+                                    nodeId, srcTp, false, apiInfoA, apiInfoZ, PT_07));
                         }
                     }
                     if ((destTp != null) && destTp.contains(StringConstants.CLIENT_TOKEN)) {
index a9fd162b0d9c244417ea59362abfaab771403894..ccb610049439d18965b8b2a3cd3076025f5dae02 100644 (file)
@@ -656,20 +656,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         renderingResults.forEach(rr -> otnLinkTerminationPoints.addAll(rr.getOtnLinkTps()));
         Link notifLink = createLinkForNotif(otnLinkTerminationPoints);
         List<String> allSupportLinks = ModelMappingUtils.getLinksFromServicePathDescription(input.getPathDescription());
-        List<String> supportedLinks = null;
-        switch (serviceType) {
-            case StringConstants.SERVICE_TYPE_ODU4:
-            case StringConstants.SERVICE_TYPE_100GE_S:
-                supportedLinks = allSupportLinks.stream()
-                    .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toList());
-                break;
-            case StringConstants.SERVICE_TYPE_ODUC4:
-                supportedLinks = allSupportLinks.stream()
-                    .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toList());
-                break;
-            default:
-                break;
-        }
+        List<String> supportedLinks = getSupportedLinks(allSupportLinks, serviceType);
 
         sendNotificationsWithPathDescription(ServicePathNotificationTypes.ServiceImplementationRequest,
             input.getServiceName(), RpcStatusEx.Successful, OPERATION_SUCCESSFUL, input.getPathDescription(),
@@ -706,20 +693,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
         renderingResults.forEach(rr -> otnLinkTerminationPoints.addAll(rr.getOtnLinkTps()));
         Link notifLink = createLinkForNotif(otnLinkTerminationPoints);
         List<String> allSupportLinks = ModelMappingUtils.getLinksFromServicePathDescription(pathDescription);
-        List<String> supportedLinks = null;
-        switch (serviceType) {
-            case StringConstants.SERVICE_TYPE_ODU4:
-            case StringConstants.SERVICE_TYPE_100GE_S:
-                supportedLinks = allSupportLinks.stream()
-                    .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toList());
-                break;
-            case StringConstants.SERVICE_TYPE_ODUC4:
-                supportedLinks = allSupportLinks.stream()
-                    .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toList());
-                break;
-            default:
-                break;
-        }
+        List<String> supportedLinks = getSupportedLinks(allSupportLinks, serviceType);
 
         sendNotificationsWithPathDescription(ServicePathNotificationTypes.ServiceDelete,
                 serviceName, RpcStatusEx.Successful, OPERATION_SUCCESSFUL, pathDescription, notifLink, supportedLinks,
@@ -815,4 +789,25 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations
                     .build())
                 .build();
     }
+
+    private List<String> getSupportedLinks(List<String> allSupportLinks, String serviceType) {
+        switch (serviceType) {
+            case StringConstants.SERVICE_TYPE_10GE:
+            case StringConstants.SERVICE_TYPE_1GE:
+                return allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.ODTU4.getName())).collect(Collectors.toList());
+            case StringConstants.SERVICE_TYPE_100GE_M:
+                return allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.ODUC4.getName())).collect(Collectors.toList());
+            case StringConstants.SERVICE_TYPE_ODU4:
+            case StringConstants.SERVICE_TYPE_100GE_S:
+                return allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.OTU4.getName())).collect(Collectors.toList());
+            case StringConstants.SERVICE_TYPE_ODUC4:
+                return allSupportLinks.stream()
+                    .filter(lk -> lk.startsWith(OtnLinkType.OTUC4.getName())).collect(Collectors.toList());
+            default:
+                return null;
+        }
+    }
 }
index 9b2e6cced0f32bf9dc73e04030ca8096ac8d82c2..50272fa418c5a6c12f36e4ced50bde6c8d6d23db 100644 (file)
@@ -337,8 +337,8 @@ public class RendererListenerImpl implements TransportpceRendererListener {
                 Short maxTribSlot = Short.valueOf(notification.getAToZDirection().getMaxTribSlot().getValue()
                     .split("\\.")[1]);
                 LOG.info("updating otn-topology node tps -tps and tpn pools");
-                this.networkModelService.updateOtnLinks(link, notification.getAToZDirection().getRate(),
-                    tribPort, minTribSlot, maxTribSlot, isDeletion);
+                this.networkModelService.updateOtnLinks(link, supportedLinkIds,
+                    notification.getAToZDirection().getRate(), tribPort, minTribSlot, maxTribSlot, isDeletion);
                 break;
             case StringConstants.SERVICE_TYPE_100GE_S:
                 this.networkModelService.updateOtnLinks(supportedLinkIds, isDeletion);