X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=pce%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Fpce%2Fnetworkanalyzer%2FPceCalculation.java;h=bfd2822a14cda27c001694ad12a648f088966dbb;hb=fe6f2ece0b57217e4ee08f824b52ab7f93747853;hp=fd8f3a28007fea337672ec7a5ce060b3e3b82346;hpb=5e0ad32ac6d31d300babbe9f1ad367cc728d5605;p=transportpce.git diff --git a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java index fd8f3a280..bfd2822a1 100644 --- a/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java +++ b/pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java @@ -11,23 +11,21 @@ package org.opendaylight.transportpce.pce.networkanalyzer; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; 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 org.opendaylight.mdsal.common.api.LogicalDatastoreType; import org.opendaylight.transportpce.common.NetworkUtils; import org.opendaylight.transportpce.common.ResponseCodes; import org.opendaylight.transportpce.common.network.NetworkTransactionService; import org.opendaylight.transportpce.pce.constraints.PceConstraints; import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev200128.PathComputationRequestInput; -import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev181130.Node1; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmLinkType; -import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev181130.OpenroadmNodeType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType; +import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType; 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; @@ -112,8 +110,6 @@ public class PceCalculation { } private boolean parseInput() { - anodeId = input.getServiceAEnd().getNodeId(); - znodeId = input.getServiceZEnd().getNodeId(); if (input.getServiceAEnd().getServiceFormat() == null || input.getServiceZEnd().getServiceFormat() == null || input.getServiceAEnd().getServiceRate() == null) { LOG.error("Service Format and Service Rate are required for a path calculation"); @@ -160,6 +156,13 @@ public class PceCalculation { LOG.debug("parseInput: unsupported service type: Format {} Rate {}", serviceFormatA, serviceRate); } + if ("ODU4".equals(serviceType) || "10GE".equals(serviceType) || "1GE".equals(serviceType)) { + anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName(); + znodeId = input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName(); + } else { + anodeId = input.getServiceAEnd().getNodeId(); + znodeId = input.getServiceZEnd().getNodeId(); + } returnStructure.setRate(input.getServiceAEnd().getServiceRate().toJava()); returnStructure.setServiceFormat(input.getServiceAEnd().getServiceFormat()); @@ -205,12 +208,13 @@ public class PceCalculation { LOG.error("readMdSal: network is null: {}", nwInstanceIdentifier); return false; } - allNodes = nw.getNode().stream().sorted((n1, n2) -> n1.getNodeId().getValue().compareTo(n2.getNodeId() - .getValue())).collect(Collectors.toList()); + allNodes = nw.nonnullNode().values().stream().sorted((n1, n2) + -> n1.getNodeId().getValue().compareTo(n2.getNodeId().getValue())).collect(Collectors.toList()); Network1 nw1 = nw.augmentation(Network1.class); if (nw1 != null) { - allLinks = nw1.getLink().stream().sorted((l1, l2) -> l1.getSource().getSourceTp().toString().compareTo(l2 - .getSource().getSourceTp().toString())).collect(Collectors.toList()); + allLinks = nw1.nonnullLink().values().stream().sorted((l1, l2) + -> l1.getSource().getSourceTp().toString().compareTo(l2.getSource().getSourceTp().toString())) + .collect(Collectors.toList()); } else { LOG.warn("no otn links in otn-topology"); } @@ -470,25 +474,23 @@ public class PceCalculation { } OpenroadmNodeType nodeType = node1.getNodeType(); - PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, node.getNodeId(), - input.getServiceAEnd().getServiceFormat(), "optical"); - pceNode.validateAZxponder(anodeId, znodeId); + PceOpticalNode pceNode = new PceOpticalNode(node, nodeType); + pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat()); pceNode.initWLlist(); if (!pceNode.isValid()) { LOG.warn(" validateNode: Node is ignored"); return false; } - if (validateNodeConstraints(pceNode).equals(ConstraintTypes.HARD_EXCLUDE)) { return false; } - if ((pceNode.getSupNetworkNodeId().equals(anodeId) && (this.aendPceNode == null)) - && (Boolean.TRUE.equals(endPceNode(nodeType, pceNode.getNodeId(), pceNode)))) { + if (endPceNode(nodeType, pceNode.getNodeId(), pceNode) && this.aendPceNode == null + && isAZendPceNode(this.serviceFormatA, pceNode, anodeId, "A")) { this.aendPceNode = pceNode; } - if ((pceNode.getSupNetworkNodeId().equals(znodeId) && (this.zendPceNode == null)) - && (Boolean.TRUE.equals(endPceNode(nodeType, pceNode.getNodeId(), pceNode)))) { + if (endPceNode(nodeType, pceNode.getNodeId(), pceNode) && this.zendPceNode == null + && isAZendPceNode(this.serviceFormatZ, pceNode, znodeId, "Z")) { this.zendPceNode = pceNode; } @@ -497,8 +499,31 @@ public class PceCalculation { return true; } - private boolean validateOtnNode(Node node) { + private boolean isAZendPceNode(String serviceFormat, PceOpticalNode pceNode, String azNodeId, String azEndPoint) { + switch (serviceFormat) { + case "Ethernet": + case "OC": + if (pceNode.getSupNetworkNodeId().equals(azNodeId)) { + return true; + } + return false; + case "OTU": + if ("A".equals(azEndPoint) && pceNode.getNodeId().getValue() + .equals(this.input.getServiceAEnd().getRxDirection().getPort().getPortDeviceName())) { + return true; + } + if ("Z".equals(azEndPoint) && pceNode.getNodeId().getValue() + .equals(this.input.getServiceZEnd().getRxDirection().getPort().getPortDeviceName())) { + return true; + } + return false; + default: + LOG.debug("Unsupported service Format {} for node {}", serviceFormat, pceNode.getNodeId().getValue()); + return false; + } + } + private boolean validateOtnNode(Node node) { LOG.info("validateOtnNode: {} ", node.getNodeId().getValue()); // PceOtnNode will be used in Graph algorithm if (node.augmentation(Node1.class) != null) { @@ -590,7 +615,7 @@ public class PceCalculation { this.azSrgs.add(nodeId); break; case XPONDER: - pceNode.initXndrTps(); + pceNode.initXndrTps(input.getServiceAEnd().getServiceFormat()); break; default: LOG.warn("endPceNode: Node {} is not SRG or XPONDER !", nodeId); @@ -628,12 +653,10 @@ public class PceCalculation { return returnStructure; } - private static void printNodesInfo(Map allpcenodes) { - Iterator> nodes = allpcenodes.entrySet().iterator(); - while (nodes.hasNext()) { - PceNode pcenode = nodes.next().getValue(); - List links = pcenode.getOutgoingLinks(); - LOG.info("In printNodes in node {} : outgoing links {} ", pcenode.getNodeId().getValue(), links); - } + private static void printNodesInfo(Map allPceNodes) { + allPceNodes.forEach(((nodeId, pceNode) -> { + LOG.info("In printNodes in node {} : outgoing links {} ", pceNode.getNodeId().getValue(), + pceNode.getOutgoingLinks()); + })); } }