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=3db3c93fcce11ccf46569514b901ef3c9c99e60d;hp=2a3d8fd37e26c1cafc012c68102f417063c51713;hb=eb3dd53f1337b87d66a28bdcbbd8154c0fb26a45;hpb=fee7a0ff61c980453e0302e750b464988f58a5ce 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 2a3d8fd37e..3db3c93fcc 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,15 +7,11 @@ */ package org.opendaylight.controller.md.inventory.manager; -import java.util.concurrent.Future; - -import org.opendaylight.controller.md.sal.common.api.TransactionStatus; import org.opendaylight.controller.sal.binding.api.data.DataModificationTransaction; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnector; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeConnectorUpdated; import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNodeUpdated; -import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorId; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRemoved; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorUpdated; @@ -31,123 +27,90 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.N import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier.InstanceIdentifierBuilder; -import org.opendaylight.yangtools.yang.common.RpcResult; 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 { +import com.google.common.base.Preconditions; - protected final static Logger LOG = LoggerFactory.getLogger(NodeChangeCommiter.class); +class NodeChangeCommiter implements OpendaylightInventoryListener { + private static final Logger LOG = LoggerFactory.getLogger(NodeChangeCommiter.class); private final FlowCapableInventoryProvider manager; public NodeChangeCommiter(final FlowCapableInventoryProvider manager) { - this.manager = manager; - } - - public FlowCapableInventoryProvider getManager() { - return this.manager; + this.manager = Preconditions.checkNotNull(manager); } @Override public synchronized void onNodeConnectorRemoved(final NodeConnectorRemoved connector) { - - final NodeConnectorRef ref = connector.getNodeConnectorRef(); - final DataModificationTransaction it = this.getManager().startChange(); - LOG.debug("removing node connector {} ", ref.getValue()); - it.removeOperationalData(ref.getValue()); - Future> commitResult = it.commit(); - listenOnTransactionState(it.getIdentifier(), commitResult, "nodeConnector removal", ref.getValue()); + manager.enqueue(new InventoryOperation() { + @Override + public void applyOperation(final DataModificationTransaction tx) { + final NodeConnectorRef ref = connector.getNodeConnectorRef(); + LOG.debug("removing node connector {} ", ref.getValue()); + tx.removeOperationalData(ref.getValue()); + } + }); } @Override public synchronized void onNodeConnectorUpdated(final NodeConnectorUpdated connector) { - - final NodeConnectorRef ref = connector.getNodeConnectorRef(); - final FlowCapableNodeConnectorUpdated flowConnector = connector - .getAugmentation(FlowCapableNodeConnectorUpdated.class); - final DataModificationTransaction it = this.manager.startChange(); - final NodeConnectorBuilder data = new NodeConnectorBuilder(connector); - NodeConnectorId id = connector.getId(); - NodeConnectorKey nodeConnectorKey = new NodeConnectorKey(id); - data.setKey(nodeConnectorKey); - boolean notEquals = (!Objects.equal(flowConnector, null)); - if (notEquals) { - final FlowCapableNodeConnector augment = InventoryMapping.toInventoryAugment(flowConnector); - data.addAugmentation(FlowCapableNodeConnector.class, augment); - } - InstanceIdentifier value = ref.getValue(); - LOG.debug("updating node connector : {}.", value); - NodeConnector build = data.build(); - it.putOperationalData((value), build); - Future> commitResult = it.commit(); - listenOnTransactionState(it.getIdentifier(), commitResult, "nodeConnector update", ref.getValue()); + manager.enqueue(new InventoryOperation() { + @Override + public void applyOperation(final DataModificationTransaction tx) { + final NodeConnectorRef ref = connector.getNodeConnectorRef(); + final NodeConnectorBuilder data = new NodeConnectorBuilder(connector); + data.setKey(new NodeConnectorKey(connector.getId())); + + final FlowCapableNodeConnectorUpdated flowConnector = connector + .getAugmentation(FlowCapableNodeConnectorUpdated.class); + if (flowConnector != null) { + final FlowCapableNodeConnector augment = InventoryMapping.toInventoryAugment(flowConnector); + data.addAugmentation(FlowCapableNodeConnector.class, augment); + } + InstanceIdentifier value = ref.getValue(); + LOG.debug("updating node connector : {}.", value); + NodeConnector build = data.build(); + tx.putOperationalData(value, build); + } + }); } @Override public synchronized void onNodeRemoved(final NodeRemoved node) { - - final NodeRef ref = node.getNodeRef(); - final DataModificationTransaction it = this.manager.startChange(); - LOG.debug("removing node : {}", ref.getValue()); - it.removeOperationalData((ref.getValue())); - Future> commitResult = it.commit(); - listenOnTransactionState(it.getIdentifier(), commitResult, "node removal", ref.getValue()); + manager.enqueue(new InventoryOperation() { + @Override + public void applyOperation(final DataModificationTransaction tx) { + final NodeRef ref = node.getNodeRef(); + LOG.debug("removing node : {}", ref.getValue()); + tx.removeOperationalData((ref.getValue())); + } + }); } @Override public synchronized void onNodeUpdated(final NodeUpdated node) { - - final NodeRef ref = node.getNodeRef(); - final FlowCapableNodeUpdated flowNode = node - . getAugmentation(FlowCapableNodeUpdated.class); - final DataModificationTransaction it = this.manager.startChange(); - final NodeBuilder nodeBuilder = new NodeBuilder(node); - nodeBuilder.setKey(new NodeKey(node.getId())); - boolean equals = Objects.equal(flowNode, null); - if (equals) { + final FlowCapableNodeUpdated flowNode = node.getAugmentation(FlowCapableNodeUpdated.class); + if (flowNode == null) { return; } - final FlowCapableNode augment = InventoryMapping.toInventoryAugment(flowNode); - nodeBuilder.addAugmentation(FlowCapableNode.class, augment); - InstanceIdentifier value = ref.getValue(); - InstanceIdentifierBuilder builder = ((InstanceIdentifier) value).builder(); - InstanceIdentifierBuilder augmentation = builder - . augmentation(FlowCapableNode.class); - final InstanceIdentifier path = augmentation.build(); - LOG.debug("updating node :{} ", path); - it.putOperationalData(path, augment); - Future> commitResult = it.commit(); - 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>() { - + manager.enqueue(new InventoryOperation() { @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); - } + public void applyOperation(final DataModificationTransaction tx) { + final NodeRef ref = node.getNodeRef(); + final NodeBuilder nodeBuilder = new NodeBuilder(node); + nodeBuilder.setKey(new NodeKey(node.getId())); + + final FlowCapableNode augment = InventoryMapping.toInventoryAugment(flowNode); + nodeBuilder.addAugmentation(FlowCapableNode.class, augment); + + @SuppressWarnings("unchecked") + InstanceIdentifierBuilder builder = ((InstanceIdentifier) ref.getValue()).builder(); + InstanceIdentifierBuilder augmentation = builder.augmentation(FlowCapableNode.class); + final InstanceIdentifier path = augmentation.build(); + LOG.debug("updating node :{} ", path); + tx.putOperationalData(path, augment); } }); }