*/
package org.opendaylight.transportpce.olm.power;
+
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
import org.opendaylight.transportpce.common.fixedflex.GridConstant;
+import org.opendaylight.transportpce.common.mapping.PortMapping;
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
-import org.opendaylight.transportpce.olm.util.OlmUtils;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerSetupInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.olm.rev210618.ServicePowerTurndownInput;
import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220316.OpenroadmNodeVersion;
import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1;
+import org.opendaylight.yangtools.yang.common.Decimal64;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
private final OpenRoadmInterfaces openRoadmInterfaces;
private final CrossConnect crossConnect;
private final DeviceTransactionManager deviceTransactionManager;
+ private final PortMapping portMapping;
private static final BigDecimal DEFAULT_TPDR_PWR_100G = new BigDecimal(-5);
private static final BigDecimal DEFAULT_TPDR_PWR_400G = new BigDecimal(0);
private static final String INTERFACE_NOT_PRESENT = "Interface {} on node {} is not present!";
private long timer2 = 20000;
// openroadm spec value is 20000, functest value is 2000
- public PowerMgmtImpl(DataBroker db, OpenRoadmInterfaces openRoadmInterfaces,
- CrossConnect crossConnect, DeviceTransactionManager deviceTransactionManager) {
+ public PowerMgmtImpl(DataBroker db, OpenRoadmInterfaces openRoadmInterfaces, CrossConnect crossConnect,
+ DeviceTransactionManager deviceTransactionManager, PortMapping portMapping) {
this.db = db;
this.openRoadmInterfaces = openRoadmInterfaces;
this.crossConnect = crossConnect;
this.deviceTransactionManager = deviceTransactionManager;
+ this.portMapping = portMapping;
}
public PowerMgmtImpl(DataBroker db, OpenRoadmInterfaces openRoadmInterfaces,
CrossConnect crossConnect, DeviceTransactionManager deviceTransactionManager,
- String timer1, String timer2) {
+ PortMapping portMapping, String timer1, String timer2) {
this.db = db;
this.openRoadmInterfaces = openRoadmInterfaces;
this.crossConnect = crossConnect;
this.deviceTransactionManager = deviceTransactionManager;
+ this.portMapping = portMapping;
try {
this.timer1 = Long.parseLong(timer1);
} catch (NumberFormatException e) {
String spectralSlotName = String.join(GridConstant.SPECTRAL_SLOT_SEPARATOR,
input.getLowerSpectralSlotNumber().toString(),
input.getHigherSpectralSlotNumber().toString());
+ if (input.getNodes() == null) {
+ LOG.error("No Nodes to configure");
+ return false;
+ }
for (int i = 0; i < input.getNodes().size(); i++) {
String nodeId = input.getNodes().get(i).getNodeId();
String destTpId = input.getNodes().get(i).getDestTp();
- Optional<Nodes> inputNodeOptional = OlmUtils.getNode(nodeId, this.db);
- if (inputNodeOptional.isEmpty()
- || inputNodeOptional.get().getNodeInfo().getNodeType() == null) {
- LOG.error("OLM-PowerMgmtImpl : Error node type cannot be retrieved for node {}", nodeId);
+ Nodes inputNode = this.portMapping.getNode(nodeId);
+ if (inputNode == null || inputNode.getNodeInfo() == null) {
+ LOG.error("OLM-PowerMgmtImpl : Error retrieving mapping node for {}", nodeId);
continue;
}
- Nodes inputNode = inputNodeOptional.get();
OpenroadmNodeVersion openroadmVersion = inputNode.getNodeInfo().getOpenroadmVersion();
switch (inputNode.getNodeInfo().getNodeType()) {
spanLossTx);
return false;
}
- BigDecimal powerValue = getRdmPowerValue(spanLossTx, input);
+ Decimal64 powerValue = Decimal64.valueOf(getRdmPowerValue(spanLossTx, input));
try {
if (!crossConnect.setPowerLevel(nodeId, OpticalControlMode.Power.getName(), powerValue,
connectionNumber)) {
private Map<String, Double> getSRGRxPowerRangeMap(String srgId, String nodeId, Integer openroadmVersion) {
- Optional<Nodes> inputNode = OlmUtils.getNode(nodeId, this.db);
- int rdmOpenroadmVersion =
- inputNode.isPresent()
- ? inputNode.get().getNodeInfo().getOpenroadmVersion().getIntValue()
- : openroadmVersion;
- Optional<Mapping> mappingObject = inputNode
- .flatMap(node -> node.nonnullMapping().values().stream()
- .filter(o -> o.key().equals(new MappingKey(srgId))).findFirst());
+ Nodes inputNode = this.portMapping.getNode(nodeId);
+ int rdmOpenroadmVersion = inputNode.getNodeInfo().getOpenroadmVersion().getIntValue();
+ Optional<Mapping> mappingObject = inputNode.nonnullMapping().values().stream()
+ .filter(o -> o.key().equals(new MappingKey(srgId)))
+ .findFirst();
if (mappingObject.isEmpty()) {
return new HashMap<>();
}
return interfaceOpt.get()
.augmentation(Interface1.class)
- .getOts().getSpanLossTransmit().getValue();
+ .getOts().getSpanLossTransmit().getValue().decimalValue();
case 2:
Optional<org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev181019
.interfaces.grp.Interface> interfaceOpt1 =
return interfaceOpt1.get()
.augmentation(org.opendaylight.yang.gen.v1.http.org
.openroadm.optical.transport.interfaces.rev181019.Interface1.class)
- .getOts().getSpanLossTransmit().getValue();
+ .getOts().getSpanLossTransmit().getValue().decimalValue();
// TODO no case 3 ?
default:
return null;
input.getNodes().get(i).getSrcTp(), destTpId, spectralSlotName);
try {
if (destTpId.toUpperCase(Locale.getDefault()).contains("DEG")) {
- if (!crossConnect.setPowerLevel(nodeId, OpticalControlMode.Power.getName(), new BigDecimal(-60),
- connectionNumber)) {
+ if (!crossConnect.setPowerLevel(nodeId, OpticalControlMode.Power.getName(),
+ Decimal64.valueOf("-60"), connectionNumber)) {
LOG.warn("Power down failed for Roadm-connection: {}", connectionNumber);
return false;
}