X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=networkmodel%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fnetworkmodel%2Fservice%2FNetworkModelServiceImpl.java;h=214aae49ce83da25f844146b79665b1bf62c6403;hb=f67e3fd65d30dea6d5c608ccc1e829a61efb38ae;hp=e5370ee33ebffd2226fff19d576c43abc07884f3;hpb=9b98d36cc5644123059a899750ff4f9141731b1e;p=transportpce.git 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 e5370ee33..214aae49c 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 @@ -19,10 +19,12 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import java.util.stream.Collectors; import org.eclipse.jdt.annotation.Nullable; +import org.opendaylight.mdsal.binding.api.DataBroker; import org.opendaylight.mdsal.binding.api.NotificationPublishService; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.InstanceIdentifiers; import org.opendaylight.transportpce.common.NetworkUtils; +import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.networkmodel.R2RLinkDiscovery; @@ -38,15 +40,15 @@ import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmo import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChanges; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesBuilder; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkmodel.rev201116.topology.update.result.TopologyChangesKey; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.OpenroadmNodeVersion; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.network.nodes.NodeInfo; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.networkutils.rev220630.OtnLinkType; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.OpenroadmNodeVersion; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.nodes.NodeInfo; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.Link1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev200529.TerminationPoint1; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.link.tp.LinkTp; -import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev210618.link.tp.LinkTpBuilder; -import org.opendaylight.yang.gen.v1.http.transportpce.topology.rev210511.OtnLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.Link1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTp; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.link.tp.LinkTpBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.Networks; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; @@ -63,12 +65,16 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPoint; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.termination.point.SupportingTerminationPoint; -import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.NetconfNodeConnectionStatus; +import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.device.rev231024.ConnectionOper.ConnectionStatus; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.common.Uint32; +import org.osgi.service.component.annotations.Activate; +import org.osgi.service.component.annotations.Component; +import org.osgi.service.component.annotations.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +@Component(immediate = true) public class NetworkModelServiceImpl implements NetworkModelService { private static final Logger LOG = LoggerFactory.getLogger(NetworkModelServiceImpl.class); @@ -83,24 +89,21 @@ public class NetworkModelServiceImpl implements NetworkModelService { private Map topologyChanges; private TopologyUpdateResult notification = null; - public NetworkModelServiceImpl(final NetworkTransactionService networkTransactionService, - final R2RLinkDiscovery linkDiscovery, PortMapping portMapping, - final NotificationPublishService notificationPublishService) { + @Activate + public NetworkModelServiceImpl(@Reference DataBroker dataBroker, + @Reference DeviceTransactionManager deviceTransactionManager, + @Reference final NetworkTransactionService networkTransactionService, + @Reference PortMapping portMapping, + @Reference final NotificationPublishService notificationPublishService) { this.networkTransactionService = networkTransactionService; - this.linkDiscovery = linkDiscovery; + this.linkDiscovery = new R2RLinkDiscovery(dataBroker, deviceTransactionManager, networkTransactionService); this.portMapping = portMapping; this.topologyShardMountedDevice = new HashMap(); this.otnTopologyShardMountedDevice = new HashMap(); this.notificationPublishService = notificationPublishService; this.topologyChanges = new HashMap(); - } - - public void init() { - LOG.info("init ..."); - } - - public void close() { + LOG.debug("NetworkModelServiceImpl instantiated"); } @Override @@ -108,6 +111,14 @@ public class NetworkModelServiceImpl implements NetworkModelService { try { LOG.info("createOpenROADMNode: {} ", nodeId); + boolean firstMount; + if (portMapping.getNode(nodeId) == null) { + firstMount = true; + } else { + LOG.info("{} already exists in portmapping but was reconnected", nodeId); + firstMount = false; + } + if (!portMapping.createMappingData(nodeId, openRoadmVersion)) { LOG.warn("Could not generate port mapping for {} skipping network model creation", nodeId); return; @@ -133,7 +144,8 @@ public class NetworkModelServiceImpl implements NetworkModelService { openroadmNetworkNode); // nodes/links creation in openroadm-topology - TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(portMapping.getNode(nodeId)); + TopologyShard topologyShard = OpenRoadmTopology.createTopologyShard(portMapping.getNode(nodeId), + firstMount); if (topologyShard != null) { this.topologyShardMountedDevice.put(nodeId, topologyShard); for (Node openRoadmTopologyNode : topologyShard.getNodes()) { @@ -176,7 +188,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { } @Override - public void setOpenRoadmNodeStatus(String nodeId, NetconfNodeConnectionStatus.ConnectionStatus connectionStatus) { + public void setOpenRoadmNodeStatus(String nodeId, ConnectionStatus connectionStatus) { LOG.info("setOpenROADMNodeStatus: {} {}", nodeId, connectionStatus.name()); /* TODO: set connection status of the device in model, @@ -191,8 +203,11 @@ public class NetworkModelServiceImpl implements NetworkModelService { */ @Override - public void deleteOpenRoadmnode(String nodeId) { + public boolean deleteOpenRoadmnode(String nodeId) { try { + if (!this.portMapping.isNodeExist(nodeId)) { + return false; + } NodeKey nodeIdKey = new NodeKey(new NodeId(nodeId)); LOG.info("deleting node in {}", NetworkUtils.UNDERLAY_NETWORK_ID); @@ -257,13 +272,15 @@ public class NetworkModelServiceImpl implements NetworkModelService { } LOG.info("deleteOpenROADMnode: {} version {}", nodeId, deviceVersion.getName()); - this.portMapping.deleteMappingData(nodeId); + this.portMapping.deletePortMappingNode(nodeId); this.networkTransactionService.commit().get(1, TimeUnit.SECONDS); LOG.info("all nodes and links deleted ! "); } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.error("Error when trying to delete node : {}", nodeId, e); + return false; } + return true; } @Override @@ -277,13 +294,13 @@ public class NetworkModelServiceImpl implements NetworkModelService { try { openroadmTopology = this.networkTransactionService .read(LogicalDatastoreType.CONFIGURATION, InstanceIdentifiers.OVERLAY_NETWORK_II) - .get().get(); + .get().orElseThrow(); if (openroadmTopology.augmentation(Network1.class) != null) { openroadmTopologyLinks = openroadmTopology.augmentation(Network1.class).getLink(); } otnTopology = this.networkTransactionService .read(LogicalDatastoreType.CONFIGURATION, InstanceIdentifiers.OTN_NETWORK_II) - .get().get(); + .get().orElseThrow(); if (otnTopology.augmentation(Network1.class) != null) { otnTopologyLinks = otnTopology.augmentation(Network1.class).getLink(); } @@ -326,7 +343,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { .setNodeId(abstractNodeid) .setTpId(tp.getTpId().getValue()) .setState(tp.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1 .class).getOperationalState()) .build(); if (!this.topologyChanges.containsKey(tc.key())) { @@ -367,7 +384,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { .setNodeId(abstractNodeid) .setTpId(tp.getTpId().getValue()) .setState(tp.augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.TerminationPoint1 + org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev230526.TerminationPoint1 .class).getOperationalState()) .build(); if (!this.topologyChanges.containsKey(tc.key())) { @@ -386,29 +403,34 @@ public class NetworkModelServiceImpl implements NetworkModelService { } @Override - public void createOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ, OtnLinkType linkType) { + public void createOtnLinks( + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link + notifLink, List suppLinks, OtnLinkType linkType) { + TopologyShard otnTopologyShard; switch (linkType) { case OTU4: + case OTUC2: + case OTUC3: case OTUC4: - otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(nodeA, tpA, nodeZ, tpZ, linkType); + otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, null, null, linkType); break; case ODTU4: + case ODUC2: + case ODUC3: case ODUC4: - String nodeTopoA = new StringBuilder(nodeA).append("-").append(tpA.split("-")[0]).toString(); - String nodeTopoZ = new StringBuilder(nodeZ).append("-").append(tpZ.split("-")[0]).toString(); List linkIdList = new ArrayList<>(); - String prefix; - if (OtnLinkType.ODTU4.equals(linkType)) { - prefix = OtnLinkType.OTU4.getName(); - } else { - prefix = OtnLinkType.OTUC4.getName(); + if (suppLinks != null) { + suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk))); } - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix)); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix)); List supportedOtu4links = getOtnLinks(linkIdList); - List tps = getOtnNodeTps(nodeTopoA, tpA, nodeTopoZ, tpZ); - otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(supportedOtu4links, tps, linkType); + String nodeTopoA = convertNetconfNodeIdToTopoNodeId(notifLink.getATermination().getNodeId(), + notifLink.getATermination().getTpId()); + String nodeTopoZ = convertNetconfNodeIdToTopoNodeId(notifLink.getZTermination().getNodeId(), + notifLink.getZTermination().getTpId()); + List tps = getOtnNodeTps(nodeTopoA, notifLink.getATermination().getTpId(), nodeTopoZ, + notifLink.getZTermination().getTpId()); + otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, supportedOtu4links, tps, linkType); break; default: LOG.error("unknown otn link type {}", linkType); @@ -449,23 +471,26 @@ public class NetworkModelServiceImpl implements NetworkModelService { } @Override - public void deleteOtnLinks(String nodeA, String tpA, String nodeZ, String tpZ, OtnLinkType linkType) { + public void deleteOtnLinks( + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link + notifLink, List suppLinks, OtnLinkType linkType) { + TopologyShard otnTopologyShard; - String nodeTopoA = new StringBuilder(nodeA).append("-").append(tpA.split("-")[0]).toString(); - String nodeTopoZ = new StringBuilder(nodeZ).append("-").append(tpZ.split("-")[0]).toString(); + String nodeTopoA = convertNetconfNodeIdToTopoNodeId(notifLink.getATermination().getNodeId(), + notifLink.getATermination().getTpId()); + String nodeTopoZ = convertNetconfNodeIdToTopoNodeId(notifLink.getZTermination().getNodeId(), + notifLink.getZTermination().getTpId()); + String tpA = notifLink.getATermination().getTpId(); + String tpZ = notifLink.getZTermination().getTpId(); List otuLinks; List linkIdList = new ArrayList<>(); - String prefix; switch (linkType) { case OTU4: + case OTUC2: + case OTUC3: case OTUC4: - if (OtnLinkType.OTU4.equals(linkType)) { - prefix = OtnLinkType.OTU4.getName(); - } else { - prefix = OtnLinkType.OTUC4.getName(); - } - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix)); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix)); + linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName())); + linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName())); otuLinks = getOtnLinks(linkIdList); if (checkLinks(otuLinks)) { deleteLinks(otuLinks); @@ -475,25 +500,21 @@ public class NetworkModelServiceImpl implements NetworkModelService { otnTopologyShard = new TopologyShard(null, null); break; case ODTU4: + case ODUC2: + case ODUC3: case ODUC4: - String prefix2; - if (OtnLinkType.ODTU4.equals(linkType)) { - prefix = OtnLinkType.ODTU4.getName(); - prefix2 = OtnLinkType.OTU4.getName(); - } else { - prefix = OtnLinkType.ODUC4.getName(); - prefix2 = OtnLinkType.OTUC4.getName(); - } - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix)); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix)); + linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName())); + linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName())); List oduLinks = getOtnLinks(linkIdList); List tps = getOtnNodeTps(nodeTopoA, tpA, nodeTopoZ, tpZ); if (checkLinks(oduLinks) && checkTerminationPoints(tps)) { deleteLinks(oduLinks); linkIdList.clear(); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, prefix2)); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, prefix2)); + if (suppLinks != null) { + suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk))); + } otuLinks = getOtnLinks(linkIdList); + otnTopologyShard = OpenRoadmOtnTopology.deleteOtnLinks(otuLinks, tps, linkType); } else { LOG.error("Error deleting ODU4 links"); @@ -504,6 +525,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { LOG.error("unknown otn link type {}", linkType); otnTopologyShard = new TopologyShard(null, null); } + if (otnTopologyShard.getLinks() != null) { for (Link otnTopologyLink : otnTopologyShard.getLinks()) { LOG.info("deleting and updating otn links {} in {}", otnTopologyLink.getLinkId().getValue(), @@ -540,23 +562,43 @@ public class NetworkModelServiceImpl implements NetworkModelService { @Override public void updateOtnLinks( - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210618.renderer.rpc.result.sp.Link - notifLink, Uint32 serviceRate, Short tribPortNb, Short minTribSoltNb, Short maxTribSlotNb, - boolean isDeletion) { + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.renderer.rpc.result.sp.Link + 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, @@ -599,6 +641,35 @@ public class NetworkModelServiceImpl implements NetworkModelService { } } + @Override + public void updateOtnLinks(List suppLinks, boolean isDeletion) { + List linkIdList = new ArrayList<>(); + if (suppLinks != null) { + suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk))); + } + List supportedOtu4links = getOtnLinks(linkIdList); + + TopologyShard otnTopologyShard = OpenRoadmOtnTopology.updateOtnLinks(supportedOtu4links, isDeletion); + if (otnTopologyShard.getLinks() != null) { + for (Link otnTopologyLink : otnTopologyShard.getLinks()) { + LOG.info("creating and updating otn links {} in {}", otnTopologyLink.getLinkId().getValue(), + NetworkUtils.OVERLAY_NETWORK_ID); + InstanceIdentifier iiOtnTopologyLink = InstanceIdentifier.builder(Networks.class) + .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) + .augmentation(Network1.class) + .child(Link.class, otnTopologyLink.key()) + .build(); + networkTransactionService.merge(LogicalDatastoreType.CONFIGURATION, iiOtnTopologyLink, otnTopologyLink); + } + } + try { + networkTransactionService.commit().get(); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Error adding OTN links in otn-topology", e); + } + LOG.info("OTN links updated"); + } + private List getOtnLinks(List linkIds) { List links = new ArrayList<>(); for (LinkId linkId : linkIds) { @@ -612,7 +683,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { if (linkOptLf.isDone()) { try { if (linkOptLf.get().isPresent()) { - links.add(linkOptLf.get().get()); + links.add(linkOptLf.get().orElseThrow()); } } catch (InterruptedException | ExecutionException e) { LOG.error("Error retreiving OTN links from otn-topology", e); @@ -682,8 +753,8 @@ public class NetworkModelServiceImpl implements NetworkModelService { } if (tpAOpt.isPresent() && tpZOpt.isPresent()) { - tps.add(tpAOpt.get()); - tps.add(tpZOpt.get()); + tps.add(tpAOpt.orElseThrow()); + tps.add(tpZOpt.orElseThrow()); } return tps; } @@ -692,8 +763,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))) @@ -705,7 +775,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { try { tpOpt = networkTransactionService.read(LogicalDatastoreType.CONFIGURATION, iiTp).get(); if (tpOpt.isPresent()) { - tps.add(tpOpt.get()); + tps.add(tpOpt.orElseThrow()); } } catch (InterruptedException | ExecutionException e) { LOG.error("Error retreiving tp {} of node {} from otn-topology", tp, nodeId, e); @@ -714,19 +784,13 @@ 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) { for (Link otnTopologyLink : links) { LOG.info("deleting link {} from {}", otnTopologyLink.getLinkId().getValue(), - NetworkUtils.OVERLAY_NETWORK_ID); + NetworkUtils.OTN_NETWORK_ID); InstanceIdentifier iiOtnTopologyLink = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) .augmentation(Network1.class) @@ -757,9 +821,9 @@ public class NetworkModelServiceImpl implements NetworkModelService { } } List odu4links = null; - if (netw1Opt.isPresent() && netw1Opt.get().getLink() != null) { + if (netw1Opt.isPresent() && netw1Opt.orElseThrow().getLink() != null) { odu4links = netw1Opt - .get() + .orElseThrow() .nonnullLink().values() .stream().filter(lk -> lk.getLinkId().getValue() .startsWith(Uint32.valueOf(100).equals(serviceRate) ? "ODUC4" : "ODTU4")) @@ -774,12 +838,12 @@ public class NetworkModelServiceImpl implements NetworkModelService { String nodeId = new StringBuilder(linkTp.getNodeId()).append("-") .append(tp.split("-")[0]).toString(); Link slink = odu4links.stream().filter(lk -> lk.getSource().getSourceNode().getValue() - .equals(nodeId) && lk.getSource().getSourceTp().getValue().equals(tp)).findFirst().get(); + .equals(nodeId) && lk.getSource().getSourceTp().getValue().equals(tp)).findFirst().orElseThrow(); if (!links.contains(slink)) { links.add(slink); } Link dlink = odu4links.stream().filter(lk -> lk.getDestination().getDestNode().getValue() - .equals(nodeId) && lk.getDestination().getDestTp().getValue().equals(tp)).findFirst().get(); + .equals(nodeId) && lk.getDestination().getDestTp().getValue().equals(tp)).findFirst().orElseThrow(); if (!links.contains(dlink)) { links.add(dlink); } @@ -816,6 +880,16 @@ public class NetworkModelServiceImpl implements NetworkModelService { } } + private String convertNetconfNodeIdToTopoNodeId(String nodeId, String tpId) { + 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")