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=125eeed75407796d0ac0bffb3323d65a4be87e23;hb=90d8a03124584b62a3ba094d709ea0618ddb344e;hp=033b3a9eb7b1cc8ffd24594a31668324a0850b1b;hpb=403c6fc1ceedebc10b1c971ff65ac54402d9a656;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 033b3a9eb..125eeed75 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 @@ -20,6 +20,9 @@ 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.StringConstants; +import org.opendaylight.transportpce.common.mapping.MappingUtils; +import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl; 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; @@ -36,7 +39,6 @@ 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.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; -//import org.opendaylight.yangtools.yang.common.Decimal64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -79,6 +81,8 @@ public class PceCalculation { NONE, HARD_EXCLUDE, HARD_INCLUDE, HARD_DIVERSITY, SOFT_EXCLUDE, SOFT_INCLUDE, SOFT_DIVERSITY; } + private MappingUtils mappingUtils; + public PceCalculation(PathComputationRequestInput input, NetworkTransactionService networkTransactionService, PceConstraints pceHardConstraints, PceConstraints pceSoftConstraints, PceResult rc) { this.input = input; @@ -86,6 +90,7 @@ public class PceCalculation { this.returnStructure = rc; this.pceHardConstraints = pceHardConstraints; + this.mappingUtils = new MappingUtilsImpl(networkTransactionService.getDataBroker()); parseInput(); } @@ -126,13 +131,13 @@ public class PceCalculation { switch (serviceFormatA) { case "Ethernet": case "OC": - serviceType = "100GE"; + serviceType = StringConstants.SERVICE_TYPE_100GE; break; case "OTU": - serviceType = "OTU4"; + serviceType = StringConstants.SERVICE_TYPE_OTU4; break; case "ODU": - serviceType = "ODU4"; + serviceType = StringConstants.SERVICE_TYPE_ODU4; break; default: LOG.debug("parseInput: unsupported service type: Format {} Rate 100L", serviceFormatA); @@ -146,9 +151,9 @@ public class PceCalculation { } else if ("Ethernet".equals(serviceFormatA)) { //only rate 100L is currently supported except in Ethernet if (serviceRate == 10L) { - serviceType = "10GE"; + serviceType = StringConstants.SERVICE_TYPE_10GE; } else if (serviceRate == 1L) { - serviceType = "1GE"; + serviceType = StringConstants.SERVICE_TYPE_1GE; } else { LOG.debug("parseInput: unsupported service type: Format Ethernet Rate {}", serviceRate); } @@ -156,7 +161,9 @@ public class PceCalculation { LOG.debug("parseInput: unsupported service type: Format {} Rate {}", serviceFormatA, serviceRate); } - if ("ODU4".equals(serviceType) || "10GE".equals(serviceType) || "1GE".equals(serviceType)) { + if (StringConstants.SERVICE_TYPE_ODU4.equals(serviceType) + || StringConstants.SERVICE_TYPE_10GE.equals(serviceType) + || StringConstants.SERVICE_TYPE_1GE.equals(serviceType)) { anodeId = input.getServiceAEnd().getTxDirection().getPort().getPortDeviceName(); znodeId = input.getServiceZEnd().getTxDirection().getPort().getPortDeviceName(); } else { @@ -239,7 +246,8 @@ public class PceCalculation { LOG.debug("analyzeNw: allNodes size {}, allLinks size {}", allNodes.size(), allLinks.size()); - if (("100GE".equals(serviceType)) || ("OTU4".equals(serviceType))) { + if ((StringConstants.SERVICE_TYPE_100GE.equals(serviceType)) + || (StringConstants.SERVICE_TYPE_OTU4.equals(serviceType))) { // 100GE service and OTU4 service are handled at the openroadm-topology layer for (Node node : allNodes) { validateNode(node); @@ -354,7 +362,8 @@ public class PceCalculation { return false; } - if (("100GE".equals(serviceType)) || ("OTU4".equals(serviceType))) { + if ((StringConstants.SERVICE_TYPE_100GE.equals(serviceType)) + || (StringConstants.SERVICE_TYPE_OTU4.equals(serviceType))) { // 100GE or OTU4 services are handled at WDM Layer PceLink pcelink = new PceLink(link, source, dest); if (!pcelink.isValid()) { @@ -424,7 +433,9 @@ public class PceCalculation { } return true; - } else if (("ODU4".equals(serviceType)) || ("10GE".equals(serviceType)) || ("1GE".equals(serviceType))) { + } else if ((StringConstants.SERVICE_TYPE_ODU4.equals(serviceType)) + || (StringConstants.SERVICE_TYPE_10GE.equals(serviceType)) + || (StringConstants.SERVICE_TYPE_1GE.equals(serviceType))) { // ODU4, 1GE and 10GE services relying on ODU2, ODU2e or ODU0 services are handled at OTN layer PceLink pceOtnLink = new PceLink(link, source, dest); @@ -465,7 +476,6 @@ public class PceCalculation { private boolean validateNode(Node node) { LOG.debug("validateNode: node {} ", node); - // PceNode will be used in Graph algorithm Node1 node1 = node.augmentation(Node1.class); if (node1 == null) { @@ -473,10 +483,15 @@ public class PceCalculation { return false; } OpenroadmNodeType nodeType = node1.getNodeType(); - - PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, node.getNodeId(), - input.getServiceAEnd().getServiceFormat(), "optical"); - pceNode.validateAZxponder(anodeId, znodeId); + String deviceNodeId = MapUtils.getSupNetworkNode(node); + // Should never happen but because of existing topology test files + // we have to manage this case + if (deviceNodeId == null || deviceNodeId.isBlank()) { + deviceNodeId = node.getNodeId().getValue(); + } + LOG.info("Device node id {} for {}", deviceNodeId, node); + PceOpticalNode pceNode = new PceOpticalNode(node, nodeType, mappingUtils.getOpenRoadmVersion(deviceNodeId)); + pceNode.validateAZxponder(anodeId, znodeId, input.getServiceAEnd().getServiceFormat()); pceNode.initWLlist(); if (!pceNode.isValid()) { @@ -553,15 +568,6 @@ public class PceCalculation { LOG.error("ValidateOtnNode: no node-type augmentation. Node {} is ignored", node.getNodeId().getValue()); return false; } - -// if (mode == "AZ") { -// pceOtnNode.validateAZxponder(anodeId, znodeId); -// } else if (mode == "intermediate") { -// pceOtnNode.validateIntermediateSwitch(); -// } else { -// LOG.error("validateOtnNode: unproper mode passed to the method : {} not supported", mode); -// return null; -// } } private ConstraintTypes validateNodeConstraints(PceNode pcenode) { @@ -616,7 +622,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);