X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=olm%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Folm%2Fservice%2FOlmPowerServiceImpl.java;fp=olm%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Ftransportpce%2Folm%2Fservice%2FOlmPowerServiceImpl.java;h=c76401a8ee37d066034a2af2d04810b8511b6d13;hb=82610815f1b706e2f9b5e5578474f3a8205c41aa;hp=700409635aac0fb13be7e34b2dbd6917a065b869;hpb=253d858d4554b9b60ca0fb245f86dbd75e2db846;p=transportpce.git diff --git a/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java b/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java index 700409635..c76401a8e 100644 --- a/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java +++ b/olm/src/main/java/org/opendaylight/transportpce/olm/service/OlmPowerServiceImpl.java @@ -37,6 +37,28 @@ import org.opendaylight.transportpce.common.mapping.PortMapping; import org.opendaylight.transportpce.olm.power.PowerMgmt; import org.opendaylight.transportpce.olm.util.OlmUtils; import org.opendaylight.transportpce.olm.util.OtsPmHolder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossBaseInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossBaseOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossBaseOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossCurrentInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossCurrentOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.CalculateSpanlossCurrentOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmInputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.GetPmOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerResetInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerResetOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerSetupInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerSetupOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerSetupOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerTurndownInput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerTurndownOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.ServicePowerTurndownOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.calculate.spanloss.base.output.Spans; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.calculate.spanloss.base.output.SpansBuilder; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev170418.get.pm.output.Measurements; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev170228.network.nodes.Mapping; import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.RatioDB; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface; import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder; @@ -61,28 +83,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.LinkId; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.Network1; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev150608.network.Link; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossBaseInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossBaseOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossBaseOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossCurrentInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossCurrentOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.CalculateSpanlossCurrentOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmInputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.GetPmOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerResetInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerResetOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownInput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutput; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownOutputBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.calculate.spanloss.base.output.Spans; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.calculate.spanloss.base.output.SpansBuilder; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.get.pm.output.Measurements; -import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.Mapping; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; import org.slf4j.Logger; @@ -98,7 +98,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { private final PortMapping portMapping; public OlmPowerServiceImpl(DataBroker dataBroker, PowerMgmt powerMgmt, - DeviceTransactionManager deviceTransactionManager, PortMapping portMapping) { + DeviceTransactionManager deviceTransactionManager, PortMapping portMapping) { this.dataBroker = dataBroker; this.powerMgmt = powerMgmt; this.portMapping = portMapping; @@ -113,6 +113,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { LOG.info("close ..."); } + @Override public GetPmOutput getPm(GetPmInput pmInput) { GetPmOutputBuilder pmOutputBuilder = OlmUtils.pmFetch(pmInput, this.deviceTransactionManager); @@ -134,7 +135,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { @Override public ServicePowerTurndownOutput servicePowerTurndown( - ServicePowerTurndownInput powerTurndownInput) { + ServicePowerTurndownInput powerTurndownInput) { ServicePowerTurndownOutputBuilder powerTurnDownOutput = new ServicePowerTurndownOutputBuilder(); // TODO add flag or return failure instead of string @@ -150,17 +151,16 @@ public class OlmPowerServiceImpl implements OlmPowerService { public CalculateSpanlossBaseOutput calculateSpanlossBase(CalculateSpanlossBaseInput spanlossBaseInput) { LOG.info("CalculateSpanlossBase Request received for source type {}", spanlossBaseInput.getSrcType()); - List networkLinks = getNetworkLinks(); if (networkLinks.isEmpty()) { LOG.warn("Failed to get links form {} topology.", NetworkUtils.OVERLAY_NETWORK_ID); return new CalculateSpanlossBaseOutputBuilder().setResult(FAILED).build(); } - if (!CalculateSpanlossBaseInput.SrcType.All.equals(spanlossBaseInput.getSrcType())) { + if (! CalculateSpanlossBaseInput.SrcType.All.equals(spanlossBaseInput.getSrcType())) { networkLinks = networkLinks.stream() - .filter(link -> link.getLinkId().equals(spanlossBaseInput.getLinkId())) - .collect(Collectors.toList()); + .filter(link -> link.getLinkId().equals(spanlossBaseInput.getLinkId())) + .collect(Collectors.toList()); } List roadmLinks = new ArrayList<>(); @@ -168,10 +168,11 @@ public class OlmPowerServiceImpl implements OlmPowerService { Link1 roadmLinkAugmentation = link.augmentation(Link1.class); if (roadmLinkAugmentation == null) { LOG.debug("Missing OpenRoadm link augmentation in link {} from {} topology.", - link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID); + link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID); continue; } if (OpenroadmLinkType.ROADMTOROADM.equals(roadmLinkAugmentation.getLinkType())) { + // Only calculate spanloss for Roadm-to-Roadm links roadmLinks.add(link); } } @@ -216,7 +217,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { Link1 roadmLinkAugmentation = link.augmentation(Link1.class); if (roadmLinkAugmentation == null) { LOG.debug("Missing OpenRoadm link augmentation in link {} from {} topology.", - link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID); + link.getLinkId().getValue(), NetworkUtils.OVERLAY_NETWORK_ID); continue; } if (OpenroadmLinkType.ROADMTOROADM.equals(roadmLinkAugmentation.getLinkType())) { @@ -252,22 +253,21 @@ public class OlmPowerServiceImpl implements OlmPowerService { NetworkKey overlayTopologyKey = new NetworkKey(new NetworkId(NetworkUtils.OVERLAY_NETWORK_ID)); InstanceIdentifier networkIID = InstanceIdentifier.builder(Network.class, overlayTopologyKey) - .augmentation(Network1.class) - .build(); + .augmentation(Network1.class) + .build(); Optional networkOptional; try (ReadOnlyTransaction rtx = this.dataBroker.newReadOnlyTransaction()) { - // TODO change to constant from Timeouts class when it will be - // merged. + //TODO change to constant from Timeouts class when it will be merged. networkOptional = rtx.read(LogicalDatastoreType.CONFIGURATION, networkIID).get(Timeouts.DATASTORE_READ, - TimeUnit.MILLISECONDS).toJavaUtil(); + TimeUnit.MILLISECONDS).toJavaUtil(); } catch (InterruptedException | ExecutionException | TimeoutException e) { LOG.warn("Read of {} topology failed", NetworkUtils.OVERLAY_NETWORK_ID); return Collections.emptyList(); } - if (!networkOptional.isPresent()) { + if (! networkOptional.isPresent()) { LOG.warn("Network augmentation with links data is not present in {} topology.", - NetworkUtils.OVERLAY_NETWORK_ID); + NetworkUtils.OVERLAY_NETWORK_ID); return Collections.emptyList(); } @@ -280,21 +280,16 @@ public class OlmPowerServiceImpl implements OlmPowerService { } /** - * This method retrieves OTS PM from current PM list by nodeId and TPId: - * Steps: + * This method retrieves OTS PM from current PM list by nodeId and TPId: Steps: * *

- * 1. Get OTS interface name from port mapping by TPId 2. Call getPm RPC to - * get OTS PM + * 1. Get OTS interface name from port mapping by TPId 2. Call getPm RPC to get OTS PM * *

* - * @param nodeId - * Node-id of the NE. - * @param tpID - * Termination point Name. - * @param pmName - * PM name which need to be retrieved + * @param nodeId Node-id of the NE. + * @param tpID Termination point Name. + * @param pmName PM name which need to be retrieved * @return reference to OtsPmHolder */ private OtsPmHolder getPmMeasurements(String nodeId, String tpID, String pmName) { @@ -304,10 +299,10 @@ public class OlmPowerServiceImpl implements OlmPowerService { return null; } GetPmInput getPmInput = new GetPmInputBuilder().setNodeId(realNodeId) - .setResourceType(ResourceTypeEnum.Interface).setGranularity(PmGranularity._15min) - .setResourceIdentifier( - new ResourceIdentifierBuilder().setResourceName(mapping.getSupportingOts()).build()) - .build(); + .setResourceType(ResourceTypeEnum.Interface).setGranularity(PmGranularity._15min) + .setResourceIdentifier( + new ResourceIdentifierBuilder().setResourceName(mapping.getSupportingOts()).build()) + .build(); GetPmOutput otsPmOutput = getPm(getPmInput); if (otsPmOutput == null) { @@ -318,7 +313,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { for (Measurements measurement : otsPmOutput.getMeasurements()) { if (pmName.equals(measurement.getPmparameterName())) { return new OtsPmHolder(pmName, Double.parseDouble(measurement.getPmparameterValue()), - mapping.getSupportingOts()); + mapping.getSupportingOts()); } } } catch (NumberFormatException e) { @@ -336,18 +331,15 @@ public class OlmPowerServiceImpl implements OlmPowerService { *

* 2. Set spanloss * - * @param nodeId - * nodeId of NE on which spanloss need to be updated - * @param interfaceName - * OTS interface for NE on which spanloss is cacluated - * @param spanLoss - * calculated spanloss value - * @param direction - * for which spanloss is calculated.It can be either Tx or Rx + * @param nodeId nodeId of NE on which spanloss need to be updated + * @param interfaceName OTS interface for NE on which spanloss is cacluated + * @param spanLoss calculated spanloss value + * @param direction for which spanloss is calculated.It can be either Tx or Rx * @return true/false */ private boolean setSpanLoss(String nodeId, String interfaceName, BigDecimal spanLoss, String direction) { String realNodeId = getRealNodeId(nodeId); + LOG.info("Setting Spanloss in device for {}, InterfaceName: {}", realNodeId, interfaceName); switch (direction) { case "TX": LOG.info("Setting 'span-loss-transmit' in device: {}, Interface: {}", realNodeId, interfaceName); @@ -360,11 +352,11 @@ public class OlmPowerServiceImpl implements OlmPowerService { break; } InstanceIdentifier interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class) - .child(Interface.class, new InterfaceKey(interfaceName)); + .child(Interface.class, new InterfaceKey(interfaceName)); com.google.common.base.Optional interfaceObject; try { Future> deviceTxFuture = - this.deviceTransactionManager.getDeviceTransaction(realNodeId); + this.deviceTransactionManager.getDeviceTransaction(realNodeId); java.util.Optional deviceTxOpt = deviceTxFuture.get(); DeviceTransaction deviceTx; if (deviceTxOpt.isPresent()) { @@ -401,7 +393,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { interfaceBuilder.addAugmentation(Interface1.class, intf1Builder.setOts(otsBuilder.build()).build()); deviceTx.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, interfaceBuilder.build()); ListenableFuture submit = - deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); + deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT, Timeouts.DEVICE_WRITE_TIMEOUT_UNIT); submit.get(); LOG.info("Spanloss Value update completed successfully"); return true; @@ -457,7 +449,7 @@ public class OlmPowerServiceImpl implements OlmPowerService { private String getRealNodeId(String mappedNodeId) { KeyedInstanceIdentifier mappedNodeII = - InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(new NodeId(mappedNodeId))); + InstanceIdentifiers.OVERLAY_NETWORK_II.child(Node.class, new NodeKey(new NodeId(mappedNodeId))); com.google.common.base.Optional realNode; try (ReadOnlyTransaction readOnlyTransaction = this.dataBroker.newReadOnlyTransaction()) { realNode = readOnlyTransaction.read(LogicalDatastoreType.CONFIGURATION, mappedNodeII).get(); @@ -467,16 +459,16 @@ public class OlmPowerServiceImpl implements OlmPowerService { } if (!realNode.isPresent() || (realNode.get().getSupportingNode() == null)) { throw new IllegalArgumentException( - String.format("Could not find node %s, or supporting node is not present", mappedNodeId)); + String.format("Could not find node %s, or supporting node is not present", mappedNodeId)); } List collect = realNode.get().getSupportingNode().stream() - .filter(node -> (node.getNetworkRef() != null) - && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue()) - && (node.getNodeRef() != null) && !Strings.isNullOrEmpty(node.getNodeRef().getValue())) - .collect(Collectors.toList()); + .filter(node -> (node.getNetworkRef() != null) + && NetworkUtils.UNDERLAY_NETWORK_ID.equals(node.getNetworkRef().getValue()) + && (node.getNodeRef() != null) && !Strings.isNullOrEmpty(node.getNodeRef().getValue())) + .collect(Collectors.toList()); if (collect.isEmpty() || (collect.size() > 1)) { throw new IllegalArgumentException(String.format("Invalid support node count [%d] was found for node %s", - collect.size(), mappedNodeId)); + collect.size(), mappedNodeId)); } return collect.iterator().next().getNodeRef().getValue(); }