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=6b067d2ae2a91731571fbaf1956bd962ce6849f9;hpb=e50901c4b06c82b91f136dac09bacce01258d7b2;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 6b067d2ae..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.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.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, @@ -282,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(); } @@ -331,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())) { @@ -372,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())) { @@ -398,10 +410,14 @@ public class NetworkModelServiceImpl implements NetworkModelService { TopologyShard otnTopologyShard; switch (linkType) { case OTU4: + case OTUC2: + case OTUC3: case OTUC4: otnTopologyShard = OpenRoadmOtnTopology.createOtnLinks(notifLink, null, null, linkType); break; case ODTU4: + case ODUC2: + case ODUC3: case ODUC4: List linkIdList = new ArrayList<>(); if (suppLinks != null) { @@ -470,6 +486,8 @@ public class NetworkModelServiceImpl implements NetworkModelService { List linkIdList = new ArrayList<>(); switch (linkType) { case OTU4: + case OTUC2: + case OTUC3: case OTUC4: linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName())); linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName())); @@ -482,6 +500,8 @@ public class NetworkModelServiceImpl implements NetworkModelService { otnTopologyShard = new TopologyShard(null, null); break; case ODTU4: + case ODUC2: + case ODUC3: case ODUC4: linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoA, tpA, nodeTopoZ, tpZ, linkType.getName())); linkIdList.add(LinkIdUtil.buildOtnLinkId(nodeTopoZ, tpZ, nodeTopoA, tpA, linkType.getName())); @@ -663,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); @@ -733,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; } @@ -755,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); @@ -770,7 +790,7 @@ public class NetworkModelServiceImpl implements NetworkModelService { 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) @@ -801,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")) @@ -818,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); }