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=ae68319318f94212b50ef12a85ecb87df43ca607;hb=b5ee86a522ce3cf5c6216f10647edb08b31c72e9;hp=ad23d37a671ace5b97be4ca8f4d7603961c989a9;hpb=c21aabb5b6eeacbe8d5ddf3db269add5e8cc13fa;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 ad23d37a6..ae6831931 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 @@ -38,13 +38,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.portmapping.rev210927.OpenroadmNodeVersion; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.mapping.Mapping; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210927.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.transportpce.topology.rev201019.OtnLinkType; +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.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; @@ -189,8 +191,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); @@ -255,13 +260,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 @@ -384,22 +391,30 @@ 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: - otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(nodeA, tpA, nodeZ, tpZ, linkType); + case OTUC4: + otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, null, null, linkType); break; case ODTU4: - String nodeTopoA = new StringBuilder(nodeA).append("-").append(tpA.split("-")[0]).toString(); - String nodeTopoZ = new StringBuilder(nodeZ).append("-").append(tpZ.split("-")[0]).toString(); + case ODUC4: List linkIdList = new ArrayList<>(); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, "OTU4")); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, "OTU4")); + if (suppLinks != null) { + suppLinks.forEach(lk -> linkIdList.add(new LinkId(lk))); + } List supportedOtu4links = getOtnLinks(linkIdList); - List tps = getOtnNodeTps(nodeTopoA, tpA, nodeTopoZ, tpZ); - - otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(supportedOtu4links, tps); + 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); @@ -440,36 +455,47 @@ 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(); - List otu4Links; + 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<>(); switch (linkType) { case OTU4: - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, "OTU4")); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, "OTU4")); - otu4Links = getOtnLinks(linkIdList); - if (checkLinks(otu4Links)) { - deleteLinks(otu4Links); + case OTUC4: + 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); } else { LOG.error("Error deleting OTU4 links"); } otnTopologyShard = new TopologyShard(null, null); break; case ODTU4: - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, "ODU4")); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, "ODU4")); - List odu4Links = getOtnLinks(linkIdList); + case ODUC4: + 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(odu4Links) && checkTerminationPoints(tps)) { - deleteLinks(odu4Links); + if (checkLinks(oduLinks) && checkTerminationPoints(tps)) { + deleteLinks(oduLinks); linkIdList.clear(); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, "OTU4")); - linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, "OTU4")); - otu4Links = getOtnLinks(linkIdList); - otnTopologyShard = OpenRoadmOtnTopology.deleteOtnLinks(otu4Links, tps); + 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"); otnTopologyShard = new TopologyShard(null, null); @@ -479,6 +505,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(), @@ -514,13 +541,28 @@ public class NetworkModelServiceImpl implements NetworkModelService { } @Override - public void updateOtnLinks(List nodeTps, String serviceRate, Short tribPortNb, Short tribSoltNb, + 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) { - List supportedOdu4Links = getSupportingOdu4Links(nodeTps); - List tps = getOtnNodeTps(nodeTps); + + 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 tps = getOtnNodeTps(linkTerminations); TopologyShard otnTopologyShard; otnTopologyShard = OpenRoadmOtnTopology.updateOtnLinks(supportedOdu4Links, tps, serviceRate, tribPortNb, - tribSoltNb, isDeletion); + minTribSoltNb, maxTribSlotNb, isDeletion); if (otnTopologyShard.getLinks() != null) { for (Link otnTopologyLink : otnTopologyShard.getLinks()) { LOG.info("creating and updating otn links {} in {}", otnTopologyLink.getLinkId().getValue(), @@ -559,6 +601,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) { @@ -648,11 +719,12 @@ public class NetworkModelServiceImpl implements NetworkModelService { return tps; } - private List getOtnNodeTps(List nodeTopoTps) { + private List getOtnNodeTps(List linkTerminations) { List tps = new ArrayList<>(); - for (String str : nodeTopoTps) { - String nodeId = str.split("--")[0]; - String tp = str.split("--")[1]; + for (LinkTp linkTp : linkTerminations) { + String tp = linkTp.getTpId(); + String nodeId = new StringBuilder(linkTp.getNodeId()).append("-") + .append(tp.split("-")[0]).toString(); 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))) @@ -700,7 +772,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { } } - private List getSupportingOdu4Links(List nodesTopoTps) { + private List getSupportingOdu4Links(List nodesTopoTps, Uint32 serviceRate) { InstanceIdentifier iiOtnTopologyLinks = InstanceIdentifier.builder(Networks.class) .child(Network.class, new NetworkKey(new NetworkId(NetworkUtils.OTN_NETWORK_ID))) .augmentation(Network1.class) @@ -720,33 +792,31 @@ public class NetworkModelServiceImpl implements NetworkModelService { odu4links = netw1Opt .get() .nonnullLink().values() - .stream().filter(lk -> lk.getLinkId().getValue().startsWith("ODU4")) + .stream().filter(lk -> lk.getLinkId().getValue() + .startsWith(Uint32.valueOf(100).equals(serviceRate) ? "ODUC4" : "ODTU4")) .collect(Collectors.toList()); } + if (odu4links == null) { + return null; + } List links = new ArrayList<>(); - if (odu4links != null) { - for (String str : nodesTopoTps) { - String[] nodeAndTp = str.split("--"); - if (nodeAndTp.length >= 2) { - String nodeId = nodeAndTp[0]; - String tp = nodeAndTp[1]; - Link slink = odu4links.stream().filter(lk -> lk.getSource().getSourceNode().getValue() - .equals(nodeId) && lk.getSource().getSourceTp().toString().equals(tp)).findFirst().get(); - if (!links.contains(slink)) { - links.add(slink); - } - Link dlink = odu4links.stream().filter(lk -> lk.getDestination().getDestNode().getValue() - .equals(nodeId) && lk.getDestination().getDestTp().toString().equals(tp)).findFirst().get(); - if (!links.contains(dlink)) { - links.add(dlink); - } - } + for (LinkTp linkTp : nodesTopoTps) { + String tp = linkTp.getTpId(); + 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(); + 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(); + if (!links.contains(dlink)) { + links.add(dlink); } - LOG.debug("odu4links = {}", links.toString()); - return links; - } else { - return null; } + LOG.debug("odu4oduC4links = {}", links); + return links; } private void createOpenRoadmOtnNode(String nodeId) { @@ -777,6 +847,10 @@ public class NetworkModelServiceImpl implements NetworkModelService { } } + private String convertNetconfNodeIdToTopoNodeId(String nodeId, String tpId) { + return new StringBuilder(nodeId).append("-").append(tpId.split("-")[0]).toString(); + } + @SuppressFBWarnings( value = "UPM_UNCALLED_PRIVATE_METHOD", justification = "false positive, this method is used by public updateOpenRoadmNetworkTopology")