From d44c5eb2a6552b7dc6d3783936ec56b144d8769d Mon Sep 17 00:00:00 2001 From: Gilles Thouenon Date: Wed, 6 Oct 2021 11:59:47 +0200 Subject: [PATCH] Manage low order otn services over multiple ODU4 - 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 Change-Id: Ib5bf4aeac21a87ba9b7a7fe8f1c41833e57b475b --- .../service/NetworkModelService.java | 13 ++-- .../service/NetworkModelServiceImpl.java | 65 ++++++++++++------- .../DeviceRendererServiceImpl.java | 2 +- .../RendererServiceOperationsImpl.java | 51 +++++++-------- .../listeners/RendererListenerImpl.java | 4 +- 5 files changed, 77 insertions(+), 58 deletions(-) diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java index 349b45ec9..5a9d3c375 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelService.java @@ -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 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 */ diff --git a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java index ae6831931..6b067d2ae 100644 --- a/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java +++ b/networkmodel/src/main/java/org/opendaylight/transportpce/networkmodel/service/NetworkModelServiceImpl.java @@ -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 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 linkTerminations = new ArrayList<>(); - linkTerminations.add(atermination); - linkTerminations.add(ztermination); - - List supportedOdu4Links = getSupportingOdu4Links(linkTerminations, serviceRate); + List 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 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 tps = getOtnNodeTps(linkTerminations); TopologyShard otnTopologyShard; otnTopologyShard = OpenRoadmOtnTopology.updateOtnLinks(supportedOdu4Links, tps, serviceRate, tribPortNb, @@ -723,8 +743,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { List 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 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 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") diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java index bffe901a3..fcd67d1cb 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/DeviceRendererServiceImpl.java @@ -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)) { diff --git a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java index a9fd162b0..ccb610049 100644 --- a/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java +++ b/renderer/src/main/java/org/opendaylight/transportpce/renderer/provisiondevice/RendererServiceOperationsImpl.java @@ -656,20 +656,7 @@ public class RendererServiceOperationsImpl implements RendererServiceOperations renderingResults.forEach(rr -> otnLinkTerminationPoints.addAll(rr.getOtnLinkTps())); Link notifLink = createLinkForNotif(otnLinkTerminationPoints); List allSupportLinks = ModelMappingUtils.getLinksFromServicePathDescription(input.getPathDescription()); - List 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 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 allSupportLinks = ModelMappingUtils.getLinksFromServicePathDescription(pathDescription); - List 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 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 getSupportedLinks(List 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; + } + } } diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java index 9b2e6cced..50272fa41 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/listeners/RendererListenerImpl.java @@ -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); -- 2.36.6