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.base.Optional;
12 import com.google.common.util.concurrent.CheckedFuture;
13 import java.math.BigDecimal;
14 import java.util.HashMap;
16 import java.util.concurrent.ExecutionException;
17 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
18 import org.opendaylight.controller.md.sal.binding.api.MountPoint;
19 import org.opendaylight.controller.md.sal.binding.api.MountPointService;
20 import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
21 import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
22 import org.opendaylight.controller.md.sal.binding.api.WriteTransaction;
23 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
24 import org.opendaylight.controller.md.sal.common.api.data.TransactionCommitFailedException;
25 import org.opendaylight.transportpce.renderer.openroadminterface.OpenRoadmInterfaces;
26 import org.opendaylight.transportpce.renderer.provisiondevice.CrossConnect;
27 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.NodeTypes;
28 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.OpticalControlMode;
29 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.types.rev161014.PowerDBm;
30 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.Ports;
31 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.pack.PortsKey;
32 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacks;
33 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.circuit.packs.CircuitPacksKey;
34 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.Interface;
35 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceBuilder;
36 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.interfaces.grp.InterfaceKey;
37 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.rev170206.org.openroadm.device.container.OrgOpenroadmDevice;
38 import org.opendaylight.yang.gen.v1.http.org.openroadm.equipment.states.types.rev161014.AdminStates;
39 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.Interface1Builder;
40 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.channel.interfaces.rev161014.och.container.OchBuilder;
41 import org.opendaylight.yang.gen.v1.http.org.openroadm.optical.transport.interfaces.rev161014.Interface1;
42 import org.opendaylight.yang.gen.v1.urn.opendaylight.netconf.node.topology.rev150114.network.topology.topology.topology.types.TopologyNetconf;
43 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerSetupInput;
44 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.olm.rev170418.ServicePowerTurndownInput;
45 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.Network;
46 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.Nodes;
47 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.NodesKey;
48 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.Mapping;
49 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.portmapping.rev170228.network.nodes.MappingKey;
50 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology;
51 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId;
52 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.TopologyId;
53 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.Topology;
54 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey;
55 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
56 import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey;
57 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
58 import org.slf4j.Logger;
59 import org.slf4j.LoggerFactory;
61 public class PowerMgmt {
62 private static final Logger LOG = LoggerFactory.getLogger(PowerMgmt.class);
63 private final DataBroker db;
64 private final MountPointService mps;
65 public static final InstanceIdentifier<Topology> NETCONF_TOPO_IID =
67 .create(NetworkTopology.class)
68 .child(Topology.class,
69 new TopologyKey(new TopologyId(TopologyNetconf.QNAME.getLocalName())));
71 public PowerMgmt(DataBroker db, MountPointService mps) {
77 * This methods measures power requirement for turning up a WL
78 * from the Spanloss at OTS transmit direction and update
79 * roadm-connection target-output-power.
82 * Input parameter from the olm servicePowerSetup rpc
84 * @return true/false based on status of operation.
86 public Boolean setPower(ServicePowerSetupInput input) {
87 LOG.info("Olm-setPower initiated");
88 for (int i = 0; i < input.getNodes().size(); i++) {
89 String nodeId = input.getNodes().get(i).getNodeId();
90 String srcTpId = input.getNodes().get(i).getSrcTp();
91 String destTpId = input.getNodes().get(i).getDestTp();
92 DataBroker deviceDb = getDeviceDataBroker(nodeId , mps);
93 Nodes inputNode = getNode(nodeId, mps, db);
94 LOG.info("Getting data from input node {}",inputNode.getNodeType());
95 LOG.info("Getting mapping data for node is {}",inputNode.getMapping().stream().filter(o -> o.getKey()
96 .equals(new MappingKey(destTpId))).findFirst().toString());
97 // If node type is transponder
98 if (inputNode.getNodeType() != null && inputNode.getNodeType().equals(NodeTypes.Xpdr)) {
99 // If its A-End transponder
100 if (destTpId.toLowerCase().contains("network")) {
101 java.util.Optional<Mapping> mappingObject = inputNode.getMapping().stream().filter(o -> o.getKey()
102 .equals(new MappingKey(destTpId))).findFirst();
103 if (mappingObject.isPresent()) {
104 Map<String, Double> txPowerRangeMap = getXponderPowerRange(nodeId, mappingObject.get()
105 .getSupportingCircuitPackName(),
106 mappingObject.get().getSupportingPort(),deviceDb);
107 if (!txPowerRangeMap.isEmpty()) {
108 LOG.info("Transponder range exists for nodeId: {}", nodeId);
109 String srgId = input.getNodes().get(i + 1).getSrcTp();
110 String nextNodeId = input.getNodes().get(i + 1).getNodeId();
111 DataBroker deviceDbSRG = getDeviceDataBroker(nextNodeId , mps);
112 Map<String, Double> rxSRGPowerRangeMap = getSRGRxPowerRange(nextNodeId, srgId, deviceDbSRG);
113 Double powerValue = new Double(0);
114 if (!rxSRGPowerRangeMap.isEmpty()) {
115 LOG.info("SRG Rx Power range exists for nodeId: {}", nodeId);
116 if (txPowerRangeMap.get("MaxTx").doubleValue()
117 <= rxSRGPowerRangeMap.get("MaxRx").doubleValue()) {
118 powerValue = txPowerRangeMap.get("MaxTx").doubleValue();
119 } else if (rxSRGPowerRangeMap.get("MaxRx").doubleValue()
120 < txPowerRangeMap.get("MaxTx").doubleValue()) {
121 powerValue = rxSRGPowerRangeMap.get("MaxRx").doubleValue();
123 LOG.info("Calculated Transponder Power value is {}" , powerValue);
124 if (setTransponderPower(nodeId, destTpId, destTpId + "-" + input.getWaveNumber(),
125 new BigDecimal(powerValue), deviceDb)) {
126 LOG.info("Transponder OCH connection: {} power updated ",
127 destTpId + "-" + input.getWaveNumber());
129 LOG.info("Now going in sleep mode");
130 Thread.sleep(180000);
131 } catch (InterruptedException e) {
132 LOG.info("Transponder warmup failed for OCH connection: {}",
133 destTpId + "-" + input.getWaveNumber(), e);
136 LOG.info("Transponder OCH connection: {} power update failed ",
137 destTpId + "-" + input.getWaveNumber());
140 LOG.info("SRG Power Range not found");
143 LOG.info("Tranponder range not available seting to default "
144 + "power for nodeId: {}", nodeId);
145 if (setTransponderPower(nodeId, destTpId, destTpId + "-" + input.getWaveNumber(),
146 new BigDecimal(-5), deviceDb)) {
147 LOG.info("Transponder OCH connection: {} power updated ",
148 destTpId + "-" + input.getWaveNumber());
150 Thread.sleep(180000);
151 } catch (InterruptedException e) {
152 // TODO Auto-generated catch block
153 LOG.info("Transponder warmup failed for OCH connection: {}",
154 destTpId + "-" + input.getWaveNumber(), e);
157 LOG.info("Transponder OCH connection: {} power update failed ",
158 destTpId + "-" + input.getWaveNumber());
162 LOG.info("Mapping object not found for nodeId: {}", nodeId);
166 LOG.info("{} is a drop node. Net power settings needed", nodeId);
168 } else if (inputNode.getNodeType() != null && inputNode.getNodeType().equals(NodeTypes.Rdm)) {
169 // If Degree is transmitting end then set power
170 if (destTpId.toLowerCase().contains("deg")) {
171 java.util.Optional<Mapping> mappingObject = inputNode.getMapping().stream().filter(o -> o.getKey()
172 .equals(new MappingKey(destTpId))).findFirst();
173 Mapping portMapping = mappingObject.get();
174 if (portMapping != null && deviceDb != null) {
175 BigDecimal spanLossTx = new OpenRoadmInterfaces(db, mps, nodeId, destTpId)
176 .getInterface(portMapping.getSupportingOts()).getAugmentation(Interface1.class).getOts()
177 .getSpanLossTransmit().getValue();
178 Double powerValue = Math.min(spanLossTx.doubleValue() - 9 , 2);
179 CrossConnect roadmCrossConnect = new CrossConnect(deviceDb, srcTpId
180 + "-" + destTpId + "-" + input.getWaveNumber());
182 Boolean setXconnPowerSuccessVal = roadmCrossConnect.setPowerLevel(OpticalControlMode.Power,
183 new PowerDBm(BigDecimal.valueOf(powerValue)));
184 if (setXconnPowerSuccessVal) {
185 LOG.info("Roadm-connection: {} updated ");
186 //TODO - commented code because one vendor is not supporting
187 //GainLoss with target-output-power
189 roadmCrossConnect.setPowerLevel(OpticalControlMode.GainLoss,
190 new PowerDBm(BigDecimal.valueOf(powerValue)));
192 LOG.info("Set Power failed for Roadm-connection: {} on Node: {}",
193 srcTpId + "-" + destTpId + "-" + input.getWaveNumber(), nodeId);
196 } catch (InterruptedException e) {
197 LOG.error("Olm-setPower wait failed {}",e);
201 // If Drop node leave node is power mode
202 } else if (destTpId.toLowerCase().contains("srg")) {
203 LOG.info("Setting power at drop node");
204 CrossConnect roadmDropCrossConnect = new CrossConnect(deviceDb, srcTpId + "-"
205 + destTpId + "-" + input.getWaveNumber());
206 roadmDropCrossConnect.setPowerLevel(OpticalControlMode.Power, null);
214 * This methods turns down power a WL by performing
218 * 1. Pull interfaces used in service and change
219 * status to outOfService
222 * 2. For each of the ROADM node set target-output-power
223 * to -60dbm, wait for 20 seconds, turn power mode to off
226 * 3. Turn down power in Z to A direction and A to Z
229 * Input parameter from the olm servicePowerTurndown rpc
231 * @return true/false based on status of operation
233 public Boolean powerTurnDown(ServicePowerTurndownInput input) {
234 LOG.info("Olm-powerTurnDown initiated");
235 /**Starting with last element into the list Z -> A for
236 turning down A -> Z **/
237 for (int i = input.getNodes().size() - 1; i >= 0; i--) {
238 String nodeId = input.getNodes().get(i).getNodeId();
239 String srcTpId = input.getNodes().get(i).getSrcTp();
240 String destTpId = input.getNodes().get(i).getDestTp();
241 Long wlNumber = input.getWaveNumber();
242 DataBroker deviceDb = getDeviceDataBroker(nodeId , mps);
243 if (!setInterfaceOutOfService(nodeId, srcTpId,
244 srcTpId + "-" + wlNumber, deviceDb)) {
245 LOG.warn("Out of service status update failed for interface {} ",
246 srcTpId + "-" + wlNumber);
249 if (!setInterfaceOutOfService(nodeId, destTpId,
250 destTpId + "-" + wlNumber, deviceDb)) {
251 LOG.warn("Out of service status update failed for interface {} ",
252 destTpId + "-" + wlNumber);
255 CrossConnect roadmCrossConnect = new CrossConnect(deviceDb, srcTpId
256 + "-" + destTpId + "-" + wlNumber);
257 if (destTpId.toLowerCase().contains("srg")) {
258 roadmCrossConnect.setPowerLevel(OpticalControlMode.Off, null);
259 } else if (destTpId.toLowerCase().contains("deg")) {
261 if (!roadmCrossConnect.setPowerLevel(OpticalControlMode.Power,
262 new PowerDBm(new BigDecimal(-60)))) {
263 LOG.warn("Power down failed for Roadm-connection: {}", srcTpId
264 + "-" + destTpId + "-" + wlNumber);
268 if (!roadmCrossConnect.setPowerLevel(OpticalControlMode.Off,
270 LOG.warn("Setting power-control mode off failed for Roadm-connection: {}",
271 srcTpId + "-" + destTpId + "-" + wlNumber);
274 } catch (InterruptedException e) {
275 // TODO Auto-generated catch block
276 LOG.error("Olm-powerTurnDown wait failed {}",e);
285 * This method updates interface administrative state to
289 * Unique identifier for the mounted netconf- node
291 * Termination point of mounted netconf - node
292 * @param interfaceName
293 * Name of interface which needs status update
295 * Reference to device data broker
296 * @return true/false based on status of operation
298 public Boolean setInterfaceOutOfService(String nodeId, String tpId,
299 String interfaceName, DataBroker deviceDb) {
300 InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier
301 .create(OrgOpenroadmDevice.class)
302 .child(Interface.class, new InterfaceKey(interfaceName));
303 Interface nodeInterface = new OpenRoadmInterfaces(db, mps, nodeId, tpId)
304 .getInterface(interfaceName);
305 InterfaceBuilder intfBuilder = new InterfaceBuilder(nodeInterface);
306 intfBuilder.setAdministrativeState(AdminStates.OutOfService);
307 final WriteTransaction writeTransaction = deviceDb.newWriteOnlyTransaction();
308 writeTransaction.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, intfBuilder.build());
309 final CheckedFuture<Void, TransactionCommitFailedException> submit = writeTransaction.submit();
312 LOG.info("Successfully posted interface {}" , interfaceName);
314 } catch (TransactionCommitFailedException ex) {
315 LOG.warn("Failed to post {} ", interfaceName ,ex);
321 * This static method returns the DataBroker for a netconf node.
324 * Unique identifier for the mounted netconf- node
326 * Reference to mount service
327 * @return Databroker for the given device
329 public static DataBroker getDeviceDataBroker(String nodeId, MountPointService mps) {
330 MountPoint netconfNode = getDeviceMountPoint(nodeId, mps);
331 if (netconfNode != null) {
332 DataBroker netconfNodeDataBroker = netconfNode.getService(DataBroker.class).get();
333 return netconfNodeDataBroker;
335 LOG.info("Device Data broker not found for :" + nodeId);
341 * This static method returns the Mountpoint for a netconf node.
344 * Unique identifier for the mounted netconf- node
346 * Reference to mount service
347 * @return MountPoint for the given device
349 public static MountPoint getDeviceMountPoint(String nodeId, MountPointService mps) {
350 final Optional<MountPoint> netconfNodeOptional = mps.getMountPoint(NETCONF_TOPO_IID
351 .child(Node.class, new NodeKey(new NodeId(nodeId))));
352 // Get mount point for specified device
353 if (netconfNodeOptional.isPresent()) {
354 MountPoint netconfNode = netconfNodeOptional.get();
357 LOG.info("Mount Point not found for :" + nodeId);
364 * This static method returns the DataBroker for a netconf node.
367 * Unique identifier for the mounted netconf- node
369 * Reference to mount service
372 * @return Nodes from portMapping for given nodeId
374 public static Nodes getNode(String nodeId, MountPointService mps, DataBroker db) {
375 InstanceIdentifier<Nodes> nodesIID = InstanceIdentifier.create(Network.class)
376 .child(Nodes.class, new NodesKey(nodeId));
377 ReadOnlyTransaction readTransaction = db.newReadOnlyTransaction();
378 Optional<Nodes> nodeObject;
380 nodeObject = readTransaction.read(LogicalDatastoreType.CONFIGURATION, nodesIID).get();
381 if (nodeObject.isPresent()) {
382 LOG.info("Found Node in Portmapping for nodeId {}", nodeObject.get().getNodeId());
383 return nodeObject.get();
385 LOG.info("Could not find Portmapping for nodeId {}", nodeId);
388 } catch (InterruptedException | ExecutionException ex) {
389 LOG.info("Unable to read Portmapping for nodeId {}", nodeId, ex);
395 * This method provides Transponder transmit power range.
398 * Unique identifier for the mounted netconf- node
399 * @param circuitPackName
400 * Transponder circuitPack name
402 * Transponder port name
404 * Databroker for the given device
405 * @return HashMap holding Min and Max transmit power for given port
407 public Map<String, Double> getXponderPowerRange(String nodeId, String circuitPackName, String portName,
408 DataBroker deviceDb) {
409 InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class).child(
410 CircuitPacks.class, new CircuitPacksKey(circuitPackName)).child(Ports.class, new PortsKey(portName));
411 ReadOnlyTransaction readTransaction = deviceDb.newReadOnlyTransaction();
412 Map<String, Double> powerRangeMap = new HashMap<String, Double>();
414 LOG.info("Fetching logical Connection Point value for port " + portName + " at circuit pack "
416 Optional<Ports> portObject = readTransaction.read(LogicalDatastoreType.OPERATIONAL, portIID).get();
417 if (portObject.isPresent()) {
418 Ports port = portObject.get();
419 if (port.getTransponderPort() != null) {
420 powerRangeMap.put("MaxTx", port.getTransponderPort().getPortPowerCapabilityMaxTx()
421 .getValue().doubleValue());
422 powerRangeMap.put("MinTx", port.getTransponderPort().getPortPowerCapabilityMinTx()
423 .getValue().doubleValue());
425 LOG.warn("Logical Connection Point value missing for " + circuitPackName + " " + port
429 } catch (InterruptedException | ExecutionException ex) {
430 LOG.warn("Read failed for Logical Connection Point value missing for " + circuitPackName + " "
432 return powerRangeMap;
434 return powerRangeMap;
438 * This method provides Transponder transmit power range.
441 * Unique identifier for the mounted netconf- node
443 * SRG Id connected to transponder
445 * Databroker for the given device
446 * @return HashMap holding Min and Max transmit power for given port
448 public Map<String, Double> getSRGRxPowerRange(String nodeId, String srgId, DataBroker deviceDb) {
449 Map<String, Double> powerRangeMap = new HashMap<String, Double>();
450 LOG.info("Coming inside Xpdr power range");
451 java.util.Optional<Mapping> mappingSRGObject = getNode(nodeId, mps, db).getMapping()
452 .stream().filter(o -> o.getKey()
453 .equals(new MappingKey(srgId))).findFirst();
454 if (mappingSRGObject.isPresent()) {
455 LOG.info("Mapping object exists.");
456 String circuitPackName = mappingSRGObject.get().getSupportingCircuitPackName();
457 String portName = mappingSRGObject.get().getSupportingPort();
458 InstanceIdentifier<Ports> portIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
459 .child(CircuitPacks.class, new CircuitPacksKey(circuitPackName))
460 .child(Ports.class, new PortsKey(portName));
462 LOG.info("Fetching logical Connection Point value for port " + portName + " at circuit pack "
463 + circuitPackName + portIID);
464 ReadOnlyTransaction rtx = deviceDb.newReadOnlyTransaction();
465 Optional<Ports> portObject = rtx.read(LogicalDatastoreType.OPERATIONAL, portIID).get();
466 if (portObject.isPresent()) {
467 Ports port = portObject.get();
468 if (port.getRoadmPort() != null) {
469 LOG.info("Port found on the node ID");
470 powerRangeMap.put("MinRx", port.getRoadmPort()
471 .getPortPowerCapabilityMinRx().getValue().doubleValue());
472 powerRangeMap.put("MaxRx", port.getRoadmPort()
473 .getPortPowerCapabilityMaxRx().getValue().doubleValue());
474 return powerRangeMap;
476 LOG.warn("Roadm ports power value is missing for " + circuitPackName + " " + port
480 LOG.info("Port not found");
482 } catch (InterruptedException | ExecutionException ex) {
483 LOG.warn("Read failed for Logical Connection Point value missing for " + circuitPackName + " "
487 LOG.info("Port mapping not found for nodeId: {} and srgId: {} ",
490 return powerRangeMap;
495 * This method retrieves transponder OCH interface and
499 * Unique identifier for the mounted netconf- node
501 * Termination port for transponder connected to SRG
502 * @param interfaceName
503 * OCH interface name carrying WL
505 * Calculated transmit power
507 * Databroker for the given device
508 * @return true/false based on status of operation
510 public boolean setTransponderPower(String nodeId, String tpId, String interfaceName, BigDecimal txPower,
511 DataBroker deviceDb) {
512 LOG.info("Setting target-power for transponder nodeId: {} InterfaceName: {}",
513 nodeId, interfaceName);
514 InterfaceBuilder ochInterfaceBuilder = new InterfaceBuilder(
515 new OpenRoadmInterfaces(db, mps, nodeId, tpId)
516 .getInterface(interfaceName));
517 OchBuilder ochBuilder = new OchBuilder(ochInterfaceBuilder
518 .getAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.optical
519 .channel.interfaces.rev161014.Interface1.class).getOch());
520 ochBuilder.setTransmitPower(new PowerDBm(txPower));
521 ochInterfaceBuilder.addAugmentation(org.opendaylight.yang.gen.v1.http.org.openroadm.optical
522 .channel.interfaces.rev161014.Interface1.class,
523 new Interface1Builder().setOch(ochBuilder.build()).build());
524 ReadWriteTransaction rwtx = deviceDb.newReadWriteTransaction();
525 InstanceIdentifier<Interface> interfacesIID = InstanceIdentifier.create(OrgOpenroadmDevice.class)
526 .child(Interface.class, new InterfaceKey(interfaceName));
527 rwtx.put(LogicalDatastoreType.CONFIGURATION, interfacesIID, ochInterfaceBuilder.build());
528 CheckedFuture<Void, TransactionCommitFailedException> submit = rwtx.submit();
531 LOG.info("Power update is submitted");
533 } catch (TransactionCommitFailedException e) {
534 LOG.info("Setting transponder power failed {}" ,e);