X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=tapi%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Ftapi%2FR2RTapiLinkDiscovery.java;h=3af6fec15a1c878adc4a3003358cfc5a3fbec211;hb=f4774d83c69f8c4dcb14291e4f9d5827b9c29020;hp=224e4aa495da904171ccbf678073050130d16071;hpb=99e77cc8ba73a8e765eafdf0ba4e41d6a36b730f;p=transportpce.git diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java index 224e4aa49..3af6fec15 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java @@ -9,30 +9,30 @@ package org.opendaylight.transportpce.tapi; import java.util.Collection; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.stream.Collectors; import java.util.stream.Stream; -import org.eclipse.jdt.annotation.Nullable; import org.opendaylight.mdsal.binding.api.MountPoint; import org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.Timeouts; import org.opendaylight.transportpce.common.device.DeviceTransactionManager; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.tapi.utils.TapiLink; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.Network; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.cp.to.degree.CpToDegree; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.mapping.Mapping; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.network.Nodes; -import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220114.network.NodesKey; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev170929.Direction; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.Network; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.cp.to.degree.CpToDegree; +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; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.network.NodesKey; +import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.OrgOpenroadmDeviceData; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.Protocols; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.Protocols1; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.NbrList; import org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev161014.lldp.container.lldp.nbr.list.IfName; +import org.opendaylight.yang.gen.v1.http.org.transportpce.common.types.rev220926.Direction; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NodeId; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.LayerProtocolName; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.Uuid; @@ -51,7 +51,7 @@ public class R2RTapiLinkDiscovery { private final TapiLink tapiLink; public R2RTapiLinkDiscovery(NetworkTransactionService networkTransactionService, - DeviceTransactionManager deviceTransactionManager, TapiLink tapiLink) { + DeviceTransactionManager deviceTransactionManager, TapiLink tapiLink) { this.networkTransactionService = networkTransactionService; this.deviceTransactionManager = deviceTransactionManager; this.tapiLink = tapiLink; @@ -64,14 +64,15 @@ public class R2RTapiLinkDiscovery { switch (nodeVersion) { case 1: // 1.2.1 - InstanceIdentifier protocols121IID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(Protocols.class); + InstanceIdentifier protocols121IID = InstanceIdentifier + .builderOfInherited(OrgOpenroadmDeviceData.class, OrgOpenroadmDevice.class) + .child(Protocols.class) + .build(); Optional protocol121Object = this.deviceTransactionManager.getDataFromDevice( nodeId.getValue(), LogicalDatastoreType.OPERATIONAL, protocols121IID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (!protocol121Object.isPresent() - || (protocol121Object.get().augmentation(Protocols1.class) == null)) { - LOG.warn("LLDP subtree is missing : isolated openroadm device"); + if (hasNoNeighbor121(protocol121Object)) { + LOG.warn("LLDP subtree is missing or incomplete: isolated openroadm device"); return new HashMap<>(); } // get neighbor list @@ -82,23 +83,24 @@ public class R2RTapiLinkDiscovery { case 2: // 2.2.1 InstanceIdentifier protocols221IID = - InstanceIdentifier.create(org.opendaylight.yang.gen.v1.http - .org.openroadm.device.rev181019.org.openroadm.device.container.OrgOpenroadmDevice.class) - .child(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019 - .org.openroadm.device.container.org.openroadm.device.Protocols.class); - Optional protocol221Object = this.deviceTransactionManager + .container.org.openroadm.device.Protocols> protocols221IID = InstanceIdentifier + .builderOfInherited( + org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.OrgOpenroadmDeviceData.class, + org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container + .OrgOpenroadmDevice.class) + .child(org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device + .container.org.openroadm.device.Protocols.class) + .build(); + var protocol221Object = this.deviceTransactionManager .getDataFromDevice(nodeId.getValue(), LogicalDatastoreType.OPERATIONAL, protocols221IID, Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT); - if (!protocol221Object.isPresent() || (protocol221Object.get().augmentation( - org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.Protocols1.class) == null)) { - LOG.warn("LLDP subtree is missing : isolated openroadm device"); + if (hasNoNeighbor221(protocol221Object)) { + LOG.warn("LLDP subtree is missing or incomplete: isolated openroadm device"); return new HashMap<>(); } - org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.lldp.container.lldp.@Nullable NbrList - nbr221List = protocol221Object.get().augmentation(org.opendaylight.yang.gen.v1.http - .org.openroadm.lldp.rev181019.Protocols1.class).getLldp().getNbrList(); + var nbr221List = protocol221Object.get().augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.Protocols1.class) + .getLldp().getNbrList(); LOG.info("LLDP subtree is present. Device has {} neighbours", nbr221List.getIfName().size()); return rdm2rdmLinkCreatev221(nodeId, tapiTopoUuid, nbr221List); case 3: @@ -111,6 +113,27 @@ public class R2RTapiLinkDiscovery { } } + private boolean hasNoNeighbor121(Optional protocol121Object) { + return protocol121Object.isEmpty() + || protocol121Object.get().augmentation(Protocols1.class) == null + || protocol121Object.get().augmentation(Protocols1.class).getLldp() == null + || protocol121Object.get().augmentation(Protocols1.class).getLldp().getNbrList() == null; + } + + private boolean hasNoNeighbor221(Optional< + org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019.org.openroadm.device.container.org + .openroadm.device.Protocols> protocol221Object) { + return protocol221Object.isEmpty() + || protocol221Object.get().augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.Protocols1.class) == null + || protocol221Object.get().augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.Protocols1.class) + .getLldp() == null + || protocol221Object.get().augmentation( + org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.Protocols1.class) + .getLldp().getNbrList() == null; + } + private Map rdm2rdmLinkCreatev221(NodeId nodeId, Uuid tapiTopoUuid, org.opendaylight.yang.gen.v1.http.org.openroadm.lldp.rev181019.lldp.container.lldp.NbrList nbrList) { Map linkMap = new HashMap<>(); @@ -228,7 +251,7 @@ public class R2RTapiLinkDiscovery { TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, this.tapiLink.getAdminState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), this.tapiLink.getOperState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), - List.of(LayerProtocolName.PHOTONICMEDIA), List.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid); + Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid); LOG.info("Tapi R2R Link OMS link created = {}", omsLink); return omsLink; } @@ -249,7 +272,7 @@ public class R2RTapiLinkDiscovery { Stream cpToDegStream = cpToDeg.stream().filter(cp -> cp.getInterfaceName() != null) .filter(cp -> cp.getInterfaceName().equals(interfaceName)); if (cpToDegStream != null) { - @SuppressWarnings("unchecked") Optional firstCpToDegree = cpToDegStream.findFirst(); + Optional firstCpToDegree = cpToDegStream.findFirst(); if (firstCpToDegree.isEmpty() || (firstCpToDegree == null)) { LOG.debug("Not found so returning nothing"); return null;