X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?p=controller.git;a=blobdiff_plain;f=opendaylight%2Fmd-sal%2Finventory-manager%2Fsrc%2Fmain%2Fjava%2Forg%2Fopendaylight%2Fcontroller%2Fmd%2Finventory%2Fmanager%2FNodeChangeCommiter.java;h=674ae398d3194d06e8a097d28be01a5b8d7a1ec3;hp=03cdf973affae85e390c5b0cd07c445fb737a360;hb=4f8e371e1b7f6a2aa31115407c3f37738030f4c5;hpb=abca01a0016ee55b6cdcb71c81419c4b143bb63a diff --git a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/NodeChangeCommiter.java b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/NodeChangeCommiter.java index 03cdf973af..674ae398d3 100644 --- a/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/NodeChangeCommiter.java +++ b/opendaylight/md-sal/inventory-manager/src/main/java/org/opendaylight/controller/md/inventory/manager/NodeChangeCommiter.java @@ -7,7 +7,6 @@ */ package org.opendaylight.controller.md.inventory.manager; -import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import org.opendaylight.controller.md.sal.common.api.TransactionStatus; @@ -37,10 +36,13 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.google.common.base.Objects; +import com.google.common.util.concurrent.FutureCallback; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.JdkFutureAdapters; public class NodeChangeCommiter implements OpendaylightInventoryListener { - private final static Logger LOG = LoggerFactory.getLogger(NodeChangeCommiter.class); + protected final static Logger LOG = LoggerFactory.getLogger(NodeChangeCommiter.class); private final FlowCapableInventoryProvider manager; @@ -57,15 +59,10 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener { final NodeConnectorRef ref = connector.getNodeConnectorRef(); final DataModificationTransaction it = this.getManager().startChange(); - NodeChangeCommiter.LOG.debug("removing node connector {} ", ref.getValue()); + LOG.debug("removing node connector {} ", ref.getValue()); it.removeOperationalData(ref.getValue()); Future> commitResult = it.commit(); - try { - commitResult.get(); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Node Connector {} not removed.", ref.getValue(), e); - } - + listenOnTransactionState(it.getIdentifier(), commitResult, "nodeConnector removal", ref.getValue()); } @Override @@ -85,16 +82,11 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener { data.addAugmentation(FlowCapableNodeConnector.class, augment); } InstanceIdentifier value = ref.getValue(); - NodeChangeCommiter.LOG.debug("updating node connector : {}.", value); + LOG.debug("updating node connector : {}.", value); NodeConnector build = data.build(); it.putOperationalData((value), build); Future> commitResult = it.commit(); - try { - commitResult.get(); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Node Connector {} not updated.", ref.getValue(), e); - } - + listenOnTransactionState(it.getIdentifier(), commitResult, "nodeConnector update", ref.getValue()); } @Override @@ -102,14 +94,10 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener { final NodeRef ref = node.getNodeRef(); final DataModificationTransaction it = this.manager.startChange(); - NodeChangeCommiter.LOG.debug("removing node : {}", ref.getValue()); + LOG.debug("removing node : {}", ref.getValue()); it.removeOperationalData((ref.getValue())); Future> commitResult = it.commit(); - try { - commitResult.get(); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Node {} not removed.", ref.getValue(), e); - } + listenOnTransactionState(it.getIdentifier(), commitResult, "node removal", ref.getValue()); } @Override @@ -128,19 +116,39 @@ public class NodeChangeCommiter implements OpendaylightInventoryListener { final FlowCapableNode augment = InventoryMapping.toInventoryAugment(flowNode); nodeBuilder.addAugmentation(FlowCapableNode.class, augment); InstanceIdentifier value = ref.getValue(); - InstanceIdentifierBuilder builder = InstanceIdentifier. builder(((InstanceIdentifier) value)); + InstanceIdentifierBuilder builder = ((InstanceIdentifier) value).builder(); InstanceIdentifierBuilder augmentation = builder . augmentation(FlowCapableNode.class); final InstanceIdentifier path = augmentation.build(); - NodeChangeCommiter.LOG.debug("updating node :{} ", path); + LOG.debug("updating node :{} ", path); it.putOperationalData(path, augment); Future> commitResult = it.commit(); - try { - commitResult.get(); - } catch (InterruptedException | ExecutionException e) { - LOG.error("Node {} not updated.", ref.getValue(), e); - } + listenOnTransactionState(it.getIdentifier(), commitResult, "node update", ref.getValue()); + } + /** + * @param txId transaction identificator + * @param future transaction result + * @param action performed by transaction + * @param nodeConnectorPath target value + */ + private static void listenOnTransactionState(final Object txId, Future> future, + final String action, final InstanceIdentifier nodeConnectorPath) { + Futures.addCallback(JdkFutureAdapters.listenInPoolThread(future),new FutureCallback>() { + + @Override + public void onFailure(Throwable t) { + LOG.error("Action {} [{}] failed for Tx:{}", action, nodeConnectorPath, txId, t); + + } + + @Override + public void onSuccess(RpcResult result) { + if(!result.isSuccessful()) { + LOG.error("Action {} [{}] failed for Tx:{}", action, nodeConnectorPath, txId); + } + } + }); } }