2 * Copyright © 2017 AT&T and others. All rights reserved.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
9 package org.opendaylight.transportpce.olm.power;
11 import com.google.common.util.concurrent.ListenableFuture;
13 import java.math.BigDecimal;
14 import java.util.HashMap;
16 import java.util.Optional;
17 import java.util.concurrent.ExecutionException;
18 import java.util.concurrent.Future;
20 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
21 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
22 import org.opendaylight.transportpce.common.Timeouts;
23 import org.opendaylight.transportpce.common.crossconnect.CrossConnect;
24 import org.opendaylight.transportpce.common.device.DeviceTransaction;
25 import org.opendaylight.transportpce.common.device.DeviceTransactionManager;
26 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaceException;
27 import org.opendaylight.transportpce.common.openroadminterfaces.OpenRoadmInterfaces;
28 import org.opendaylight.transportpce.olm.util.OlmUtils;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnections;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsBuilder;
42 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.org.openroadm.device.RoadmConnectionsKey;
43 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev161014.AdminStates;
44 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1Builder;
45 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.och.container.OchBuilder;
46 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInput;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownInput;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.Nodes;
50 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.Mapping;
51 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.MappingKey;
52 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
53 import org.slf4j.Logger;
54 import org.slf4j.LoggerFactory;
56 public class PowerMgmt {
57 private static final Logger LOG = LoggerFactory.getLogger(PowerMgmt.class);
58 private static final long DATA_STORE_READ_TIMEOUT = 120;
59 private final DataBroker db;
60 private final OpenRoadmInterfaces openRoadmInterfaces;
61 private final CrossConnect crossConnect;
62 private final DeviceTransactionManager deviceTransactionManager;
64 public PowerMgmt(DataBroker db, OpenRoadmInterfaces openRoadmInterfaces,
65 CrossConnect crossConnect, DeviceTransactionManager deviceTransactionManager) {
67 this.openRoadmInterfaces = openRoadmInterfaces;
68 this.crossConnect = crossConnect;
69 this.deviceTransactionManager = deviceTransactionManager;
73 * This methods measures power requirement for turning up a WL
74 * from the Spanloss at OTS transmit direction and update
75 * roadm-connection target-output-power.
78 * Input parameter from the olm servicePowerSetup rpc
80 * @return true/false based on status of operation.
82 public Boolean setPower(ServicePowerSetupInput input) {
83 LOG.info("Olm-setPower initiated");
84 for (int i = 0; i < input.getNodes().size(); i++) {
85 String nodeId = input.getNodes().get(i).getNodeId();
86 String srcTpId = input.getNodes().get(i).getSrcTp();
87 String destTpId = input.getNodes().get(i).getDestTp();
88 Optional<Nodes> inputNodeOptional = OlmUtils.getNode(nodeId, db);
89 // If node type is transponder
90 if (inputNodeOptional.isPresent()
91 && inputNodeOptional.get().getNodeType() != null
92 && inputNodeOptional.get().getNodeType().equals(NodeTypes.Xpdr)) {
94 Nodes inputNode = inputNodeOptional.get();
95 LOG.info("Getting data from input node {}", inputNode.getNodeType());
96 LOG.info("Getting mapping data for node is {}", inputNode.getMapping().stream().filter(o -> o.getKey()
97 .equals(new MappingKey(destTpId))).findFirst().toString());
98 // If its A-End transponder
99 if (destTpId.toLowerCase().contains("network")) {
100 java.util.Optional<Mapping> mappingObject = inputNode.getMapping().stream().filter(o -> o.getKey()
101 .equals(new MappingKey(destTpId))).findFirst();
102 if (mappingObject.isPresent()) {
103 Map<String, Double> txPowerRangeMap = getXponderPowerRange(mappingObject.get()
104 .getSupportingCircuitPackName(), mappingObject.get().getSupportingPort(), nodeId);
105 if (!txPowerRangeMap.isEmpty()) {
106 LOG.info("Transponder range exists for nodeId: {}", nodeId);
107 String srgId = input.getNodes().get(i + 1).getSrcTp();
108 String nextNodeId = input.getNodes().get(i + 1).getNodeId();
110 Map<String, Double> rxSRGPowerRangeMap = getSRGRxPowerRange(nextNodeId, srgId);
111 double powerValue = 0;
112 if (!rxSRGPowerRangeMap.isEmpty()) {
113 LOG.info("SRG Rx Power range exists for nodeId: {}", nodeId);
114 if (txPowerRangeMap.get("MaxTx")
115 <= rxSRGPowerRangeMap.get("MaxRx")) {
116 powerValue = txPowerRangeMap.get("MaxTx");
117 } else if (rxSRGPowerRangeMap.get("MaxRx")
118 < txPowerRangeMap.get("MaxTx")) {
119 powerValue = rxSRGPowerRangeMap.get("MaxRx");
121 LOG.info("Calculated Transponder Power value is {}" , powerValue);
122 String interfaceName = destTpId + "-" + input.getWaveNumber();
123 if (setTransponderPower(nodeId, interfaceName, new BigDecimal(powerValue))) {
124 LOG.info("Transponder OCH connection: {} power updated ", interfaceName);
126 LOG.info("Now going in sleep mode");
127 Thread.sleep(120000);
128 } catch (InterruptedException e) {
129 LOG.info("Transponder warmup failed for OCH connection: {}", interfaceName, e);
132 LOG.info("Transponder OCH connection: {} power update failed ", interfaceName);
135 LOG.info("SRG Power Range not found");
138 LOG.info("Tranponder range not available seting to default "
139 + "power for nodeId: {}", nodeId);
140 String interfaceName = destTpId + "-" + input.getWaveNumber();
141 if (setTransponderPower(nodeId, interfaceName, new BigDecimal(-5))) {
142 LOG.info("Transponder OCH connection: {} power updated ", interfaceName);
144 Thread.sleep(120000);
145 } catch (InterruptedException e) {
146 // TODO Auto-generated catch block
147 LOG.info("Transponder warmup failed for OCH connection: {}", interfaceName, e);
150 LOG.info("Transponder OCH connection: {} power update failed ", interfaceName);
154 LOG.info("Mapping object not found for nodeId: {}", nodeId);
158 LOG.info("{} is a drop node. Net power settings needed", nodeId);
160 } else if (inputNodeOptional.isPresent()
161 && inputNodeOptional.get().getNodeType() != null
162 && inputNodeOptional.get().getNodeType().equals(NodeTypes.Rdm)) {
163 // If Degree is transmitting end then set power
164 Nodes inputNode = inputNodeOptional.get();
165 LOG.info("This is a roadm device ");
166 String connectionNumber = srcTpId + "-" + destTpId + "-" + input.getWaveNumber();
167 LOG.info("Connection number is {}", connectionNumber);
168 if (destTpId.toLowerCase().contains("deg")) {
169 Optional<Mapping> mappingObjectOptional = inputNode.getMapping().stream().filter(o -> o.getKey()
170 .equals(new MappingKey(destTpId))).findFirst();
171 if (mappingObjectOptional.isPresent()) {
172 LOG.info("Dest point is Degree {}", mappingObjectOptional.get());
173 Mapping portMapping = mappingObjectOptional.get();
174 Optional<Interface> interfaceOpt;
176 interfaceOpt = openRoadmInterfaces.getInterface(nodeId, portMapping.getSupportingOts());
177 } catch (OpenRoadmInterfaceException ex) {
178 LOG.error("Failed to get interface {} from node {}!", portMapping.getSupportingOts(),
182 if (interfaceOpt.isPresent()) {
183 BigDecimal spanLossTx = interfaceOpt.get().getAugmentation(Interface1.class).getOts()
184 .getSpanLossTransmit().getValue();
185 LOG.info("Spanloss TX is {}", spanLossTx);
186 BigDecimal powerValue = BigDecimal.valueOf(Math.min(spanLossTx.doubleValue() - 9, 2));
187 LOG.info("Power Value is {}", powerValue);
189 Boolean setXconnPowerSuccessVal = setPowerLevel(nodeId,
190 OpticalControlMode.Power, powerValue, connectionNumber);
191 LOG.info("Success Value is {}", setXconnPowerSuccessVal);
192 if (setXconnPowerSuccessVal) {
193 LOG.info("Roadm-connection: {} updated ");
194 //TODO - commented code because one vendor is not supporting
195 //GainLoss with target-output-power
197 setPowerLevel(nodeId, OpticalControlMode.GainLoss, powerValue,
200 LOG.info("Set Power failed for Roadm-connection: {} on Node: {}", connectionNumber,
204 } catch (InterruptedException e) {
205 LOG.error("Olm-setPower wait failed {}", e);
209 LOG.error("Interface {} on node {} is not present!", portMapping.getSupportingOts(),
214 // If Drop node leave node is power mode
215 } else if (destTpId.toLowerCase().contains("srg")) {
216 LOG.info("Setting power at drop node");
217 setPowerLevel(nodeId, OpticalControlMode.Power, null, connectionNumber);
225 * This methods turns down power a WL by performing
229 * 1. Pull interfaces used in service and change
230 * status to outOfService
233 * 2. For each of the ROADM node set target-output-power
234 * to -60dbm, wait for 20 seconds, turn power mode to off
237 * 3. Turn down power in Z to A direction and A to Z
240 * Input parameter from the olm servicePowerTurndown rpc
242 * @return true/false based on status of operation
244 public Boolean powerTurnDown(ServicePowerTurndownInput input) {
245 LOG.info("Olm-powerTurnDown initiated");
246 /*Starting with last element into the list Z -> A for
247 turning down A -> Z */
248 for (int i = input.getNodes().size() - 1; i >= 0; i--) {
249 String nodeId = input.getNodes().get(i).getNodeId();
250 String srcTpId = input.getNodes().get(i).getSrcTp();
251 String destTpId = input.getNodes().get(i).getDestTp();
252 Long wlNumber = input.getWaveNumber();
253 String srcInterfaceName = srcTpId + "-" + wlNumber;
254 //if (!setInterfaceOutOfService(nodeId, srcTpId, srcInterfaceName, deviceDb)) {
255 // LOG.warn("Out of service status update failed for interface {} ", srcInterfaceName);
258 String destInterfaceName = destTpId + "-" + wlNumber;
259 //if (!setInterfaceOutOfService(nodeId, destTpId, destInterfaceName, deviceDb)) {
260 // LOG.warn("Out of service status update failed for interface {} ", destInterfaceName);
263 String connectionNumber = srcTpId + "-" + destTpId + "-" + wlNumber;
264 if (destTpId.toLowerCase().contains("srg")) {
265 setPowerLevel(nodeId, OpticalControlMode.Off, null, connectionNumber);
266 } else if (destTpId.toLowerCase().contains("deg")) {
268 if (!setPowerLevel(nodeId, OpticalControlMode.Power, new BigDecimal(-60),
270 LOG.warn("Power down failed for Roadm-connection: {}", connectionNumber);
274 if (!setPowerLevel(nodeId, OpticalControlMode.Off, null, connectionNumber)) {
275 LOG.warn("Setting power-control mode off failed for Roadm-connection: {}", connectionNumber);
278 } catch (InterruptedException e) {
279 // TODO Auto-generated catch block
280 LOG.error("Olm-powerTurnDown wait failed {}",e);
289 * This method updates interface administrative state to
293 * Unique identifier for the mounted netconf- node
295 * Termination point of mounted netconf - node
296 * @param interfaceName
297 * Name of interface which needs status update
298 * @return true/false based on status of operation
300 private Boolean setInterfaceOutOfService(String nodeId, String tpId, String interfaceName) {
301 InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier
302 .create(OrgOpenroadmDevice.class)
303 .child(Interface.class, new InterfaceKey(interfaceName));
304 Optional<Interface> nodeInterfaceOpt;
306 nodeInterfaceOpt = openRoadmInterfaces.getInterface(nodeId, interfaceName);
307 } catch (OpenRoadmInterfaceException ex) {
308 LOG.error("Failed to get interface {} from node {}!", interfaceName, nodeId, ex);
311 if (nodeInterfaceOpt.isPresent()) {
312 InterfaceBuilder intfBuilder = new InterfaceBuilder(nodeInterfaceOpt.get());
313 intfBuilder.setAdministrativeState(AdminStates.OutOfService);
314 Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(nodeId);
315 DeviceTransaction deviceTx;
317 Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
318 if (deviceTxOpt.isPresent()) {
319 deviceTx = deviceTxOpt.get();
321 LOG.error("Transaction for device {} was not found!", nodeId);
324 } catch (InterruptedException | ExecutionException e) {
325 LOG.error("Unable to get transaction for device {}!", nodeId, e);
328 deviceTx.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, intfBuilder.build());
329 ListenableFuture<Void> submit = deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT,
330 Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
333 LOG.info("Successfully posted interface {}", interfaceName);
335 } catch (InterruptedException | ExecutionException ex) {
336 LOG.warn("Failed to post {} ", interfaceName, ex);
340 LOG.error("Interface {} on node {} is not present!", interfaceName, nodeId);
346 * This method provides Transponder transmit power range.
348 * @param circuitPackName
349 * Transponder circuitPack name
351 * Transponder port name
353 * Databroker for the given device
354 * @return HashMap holding Min and Max transmit power for given port
356 private Map<String, Double> getXponderPowerRange(String circuitPackName, String portName, String deviceId) {
357 InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
358 .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName))
359 .child(Ports.class, new PortsKey(portName));
360 Map<String, Double> powerRangeMap = new HashMap<>();
361 LOG.info("Fetching logical Connection Point value for port {} at circuit pack {}", portName, circuitPackName);
362 Optional<Ports> portObject =
363 deviceTransactionManager.getDataFromDevice(deviceId, LogicalDatastoreType.OPERATIONAL, portIID,
364 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
365 if (portObject.isPresent()) {
366 Ports port = portObject.get();
367 if (port.getTransponderPort().getPortPowerCapabilityMaxTx() != null) {
368 powerRangeMap.put("MaxTx", port.getTransponderPort().getPortPowerCapabilityMaxTx().getValue()
370 powerRangeMap.put("MinTx", port.getTransponderPort().getPortPowerCapabilityMinTx().getValue()
373 LOG.warn("Logical Connection Point value missing for {} {}", circuitPackName, port.getPortName());
376 return powerRangeMap;
380 * This method provides Transponder transmit power range.
383 * Unique identifier for the mounted netconf- node
385 * SRG Id connected to transponder
386 * @return HashMap holding Min and Max transmit power for given port
388 private Map<String, Double> getSRGRxPowerRange(String nodeId, String srgId) {
389 Map<String, Double> powerRangeMap = new HashMap<>();
390 LOG.info("Coming inside Xpdr power range");
391 Optional<Mapping> mappingSRGOptional = OlmUtils.getNode(nodeId, db).flatMap(node -> node.getMapping()
392 .stream().filter(o -> o.getKey()
393 .equals(new MappingKey(srgId))).findFirst());
394 if (mappingSRGOptional.isPresent()) {
395 LOG.info("Mapping object exists.");
396 String circuitPackName = mappingSRGOptional.get().getSupportingCircuitPackName();
397 String portName = mappingSRGOptional.get().getSupportingPort();
398 InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
399 .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName))
400 .child(Ports.class, new PortsKey(portName));
402 LOG.info("Fetching logical Connection Point value for port {} at circuit pack {}{}", portName,
403 circuitPackName, portIID);
404 Optional<Ports> portObject =
405 deviceTransactionManager.getDataFromDevice(nodeId, LogicalDatastoreType.OPERATIONAL, portIID,
406 Timeouts.DEVICE_READ_TIMEOUT, Timeouts.DEVICE_READ_TIMEOUT_UNIT);
407 if (portObject.isPresent()) {
408 Ports port = portObject.get();
409 if (port.getRoadmPort() != null) {
410 LOG.info("Port found on the node ID");
411 powerRangeMap.put("MinRx", port.getRoadmPort()
412 .getPortPowerCapabilityMinRx().getValue().doubleValue());
413 powerRangeMap.put("MaxRx", port.getRoadmPort()
414 .getPortPowerCapabilityMaxRx().getValue().doubleValue());
415 return powerRangeMap;
417 LOG.warn("Roadm ports power value is missing for {} {}", circuitPackName, port.getPortName());
420 LOG.info("Port not found");
424 LOG.info("Port mapping not found for nodeId: {} and srgId: {} ",
427 return powerRangeMap;
432 * This method retrieves transponder OCH interface and
436 * Unique identifier for the mounted netconf- node
437 * @param interfaceName
438 * OCH interface name carrying WL
440 * Calculated transmit power
441 * @return true/false based on status of operation
443 private boolean setTransponderPower(String nodeId, String interfaceName, BigDecimal txPower) {
444 LOG.info("Setting target-power for transponder nodeId: {} InterfaceName: {}",
445 nodeId, interfaceName);
446 Optional<Interface> interfaceOptional;
448 interfaceOptional = openRoadmInterfaces.getInterface(nodeId, interfaceName);
449 } catch (OpenRoadmInterfaceException ex) {
450 LOG.error("Failed to get interface {} from node {}!", interfaceName, nodeId, ex);
453 if (interfaceOptional.isPresent()) {
454 InterfaceBuilder ochInterfaceBuilder =
455 new InterfaceBuilder(interfaceOptional.get());
456 OchBuilder ochBuilder = new OchBuilder(ochInterfaceBuilder.getAugmentation(
457 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014
458 .Interface1.class).getOch());
459 ochBuilder.setTransmitPower(new PowerDBm(txPower));
460 ochInterfaceBuilder.addAugmentation(
461 org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014
462 .Interface1.class, new Interface1Builder().setOch(ochBuilder.build()).build());
464 Future<Optional<DeviceTransaction>> deviceTxFuture = deviceTransactionManager.getDeviceTransaction(nodeId);
465 DeviceTransaction deviceTx;
467 Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
468 if (deviceTxOpt.isPresent()) {
469 deviceTx = deviceTxOpt.get();
471 LOG.error("Transaction for device {} was not found!", nodeId);
474 } catch (InterruptedException | ExecutionException e) {
475 LOG.error("Unable to get transaction for device {}!", nodeId, e);
479 InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
480 .child(Interface.class, new InterfaceKey(interfaceName));
481 deviceTx.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, ochInterfaceBuilder.build());
482 ListenableFuture<Void> submit = deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT,
483 Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
486 LOG.info("Power update is submitted");
488 } catch (InterruptedException | ExecutionException e) {
489 LOG.error("Setting transponder power failed {}", e);
492 LOG.error("Interface {} on node {} is not present!", interfaceName, nodeId);
498 * This method does an edit-config on roadm connection subtree for a given
499 * connection number in order to set power level for use by the optical
505 * Optical control modelcan be off, power or gainLoss.
507 * Power value in DBm.
508 * @param connectionNumber
509 * Name of the cross connect.
510 * @return true/false based on status of operation.
512 private boolean setPowerLevel(String deviceId, OpticalControlMode mode, BigDecimal powerValue,
513 String connectionNumber) {
514 Optional<RoadmConnections> rdmConnOpt = crossConnect.getCrossConnect(deviceId, connectionNumber);
515 if (rdmConnOpt.isPresent()) {
516 RoadmConnectionsBuilder rdmConnBldr = new RoadmConnectionsBuilder(rdmConnOpt.get());
517 rdmConnBldr.setOpticalControlMode(mode);
518 if (powerValue != null) {
519 rdmConnBldr.setTargetOutputPower(new PowerDBm(powerValue));
521 RoadmConnections newRdmConn = rdmConnBldr.build();
523 Future<Optional<DeviceTransaction>> deviceTxFuture =
524 deviceTransactionManager.getDeviceTransaction(deviceId);
525 DeviceTransaction deviceTx;
527 Optional<DeviceTransaction> deviceTxOpt = deviceTxFuture.get();
528 if (deviceTxOpt.isPresent()) {
529 deviceTx = deviceTxOpt.get();
531 LOG.error("Transaction for device {} was not found!", deviceId);
534 } catch (InterruptedException | ExecutionException e) {
535 LOG.error("Unable to get transaction for device {}!", deviceId, e);
539 // post the cross connect on the device
540 InstanceIdentifier<RoadmConnections> roadmConnIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
541 .child(RoadmConnections.class, new RoadmConnectionsKey(connectionNumber));
542 deviceTx.put(LogicalDatastoreType.CONFIGURATION, roadmConnIID, newRdmConn);
543 ListenableFuture<Void> submit = deviceTx.submit(Timeouts.DEVICE_WRITE_TIMEOUT,
544 Timeouts.DEVICE_WRITE_TIMEOUT_UNIT);
547 LOG.info("Roadm connection power level successfully set ");
549 } catch (InterruptedException | ExecutionException ex) {
550 LOG.warn("Failed to post {}", newRdmConn, ex);
554 LOG.warn("Roadm-Connection is null in set power level ({})", connectionNumber);