From 8ead8788f7936a9e8e1fbad5fbf60a444e2dd091 Mon Sep 17 00:00:00 2001 From: Jozef Gloncak Date: Tue, 14 Apr 2015 16:09:33 +0200 Subject: [PATCH] Topology manager - write to topology reference to inventory Change-Id: I943f8134894172a9dc88d10262a904b2126e50c4 Signed-off-by: Jozef Gloncak --- .../manager/DataChangeListenerImpl.java | 2 +- .../manager/FlowCapableTopologyProvider.java | 6 +-- .../manager/NodeChangeListenerImpl.java | 35 ++++++++++----- .../TerminationPointChangeListenerImpl.java | 45 ++++++++++++------- 4 files changed, 58 insertions(+), 30 deletions(-) diff --git a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataChangeListenerImpl.java b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataChangeListenerImpl.java index 1456577369..39653d5040 100644 --- a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataChangeListenerImpl.java +++ b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/DataChangeListenerImpl.java @@ -63,7 +63,7 @@ public abstract class DataChangeListenerImpl implements DataChangeListener, Auto @Override public void applyOperation(ReadWriteTransaction transaction) { - transaction.put(LogicalDatastoreType.OPERATIONAL, iiToTopologyNode, node); + transaction.merge(LogicalDatastoreType.OPERATIONAL, iiToTopologyNode, node, true); } }); } diff --git a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/FlowCapableTopologyProvider.java b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/FlowCapableTopologyProvider.java index 4136c7f1d9..558210d182 100644 --- a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/FlowCapableTopologyProvider.java +++ b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/FlowCapableTopologyProvider.java @@ -31,7 +31,7 @@ public class FlowCapableTopologyProvider extends AbstractBindingAwareProvider im private final static Logger LOG = LoggerFactory.getLogger(FlowCapableTopologyProvider.class); private ListenerRegistration listenerRegistration; private Thread thread; - private TerminationPointChangeListenerImpl terminationChangeListener; + private TerminationPointChangeListenerImpl terminationPointChangeListener; private NodeChangeListenerImpl nodeChangeListener; static final String TOPOLOGY_ID = "flow:1"; @@ -53,7 +53,7 @@ public class FlowCapableTopologyProvider extends AbstractBindingAwareProvider im final OperationProcessor processor = new OperationProcessor(dataBroker); final FlowCapableTopologyExporter listener = new FlowCapableTopologyExporter(processor, path); this.listenerRegistration = notificationService.registerNotificationListener(listener); - this.terminationChangeListener = new TerminationPointChangeListenerImpl(dataBroker, processor); + this.terminationPointChangeListener = new TerminationPointChangeListenerImpl(dataBroker, processor); nodeChangeListener = new NodeChangeListenerImpl(dataBroker, processor); final ReadWriteTransaction tx = dataBroker.newReadWriteTransaction(); @@ -81,7 +81,7 @@ public class FlowCapableTopologyProvider extends AbstractBindingAwareProvider im } listenerRegistration = null; } - unregisterListener(terminationChangeListener); + unregisterListener(terminationPointChangeListener); unregisterListener(nodeChangeListener); if (thread != null) { thread.interrupt(); diff --git a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/NodeChangeListenerImpl.java b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/NodeChangeListenerImpl.java index 54f39a773a..6c4f1b6136 100644 --- a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/NodeChangeListenerImpl.java +++ b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/NodeChangeListenerImpl.java @@ -7,9 +7,12 @@ */ package org.opendaylight.openflowplugin.applications.topology.manager; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeRef; + +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.topology.inventory.rev131030.InventoryNode; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.topology.inventory.rev131030.InventoryNodeBuilder; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; - import java.util.Set; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.slf4j.Logger; @@ -46,9 +49,8 @@ public class NodeChangeListenerImpl extends DataChangeListenerImpl { * @param removedPaths */ private void processRemovedNode(Set> removedNodes) { - for ( InstanceIdentifier removedNode : removedNodes) { - final InstanceIdentifier iiToTopologyRemovedNode - = provideIIToTopologyNode(provideTopologyNodeId(removedNode)); + for (InstanceIdentifier removedNode : removedNodes) { + final InstanceIdentifier iiToTopologyRemovedNode = provideIIToTopologyNode(provideTopologyNodeId(removedNode)); if (iiToTopologyRemovedNode != null) { operationProcessor.enqueueOperation(new TopologyOperation() { @@ -77,21 +79,34 @@ public class NodeChangeListenerImpl extends DataChangeListenerImpl { */ private void processAddedNode(Map, DataObject> addedDatas) { for (Entry, DataObject> addedData : addedDatas.entrySet()) { - createData(addedData.getKey(), addedData.getValue()); + createData(addedData.getKey()); } } - protected void createData(InstanceIdentifier iiToNodeInInventory, final DataObject data) { - final NodeBuilder topologyNodeBuilder = new NodeBuilder(); - + protected void createData(InstanceIdentifier iiToNodeInInventory) { final NodeId nodeIdInTopology = provideTopologyNodeId(iiToNodeInInventory); if (nodeIdInTopology != null) { - topologyNodeBuilder.setNodeId(nodeIdInTopology); final InstanceIdentifier iiToTopologyNode = provideIIToTopologyNode(nodeIdInTopology); - sendToTransactionChain(topologyNodeBuilder.build(), iiToTopologyNode); + sendToTransactionChain(prepareTopologyNode(nodeIdInTopology, iiToNodeInInventory), iiToTopologyNode); } else { LOG.debug("Inventory node key is null. Data can't be written to topology"); } } + /** + * @param nodeIdInTopology + * @param iiToNodeInInventory + * @return + */ + private org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node prepareTopologyNode(NodeId nodeIdInTopology, InstanceIdentifier iiToNodeInInventory) { + final InventoryNode inventoryNode = new InventoryNodeBuilder() + .setInventoryNodeRef(new NodeRef(iiToNodeInInventory.firstIdentifierOf(Node.class))) + .build(); + + final NodeBuilder topologyNodeBuilder = new NodeBuilder(); + topologyNodeBuilder.setNodeId(nodeIdInTopology); + topologyNodeBuilder.addAugmentation(InventoryNode.class, inventoryNode); + + return topologyNodeBuilder.build(); + } } \ No newline at end of file diff --git a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/TerminationPointChangeListenerImpl.java b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/TerminationPointChangeListenerImpl.java index a5c48579cb..b4714f3646 100644 --- a/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/TerminationPointChangeListenerImpl.java +++ b/applications/topology-manager/src/main/java/org/opendaylight/openflowplugin/applications/topology/manager/TerminationPointChangeListenerImpl.java @@ -7,10 +7,12 @@ */ package org.opendaylight.openflowplugin.applications.topology.manager; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.topology.inventory.rev131030.InventoryNodeConnector; +import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeConnectorRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.model.topology.inventory.rev131030.InventoryNodeConnectorBuilder; import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; - import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NodeId; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.node.TerminationPointBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.node.NodeConnectorKey; @@ -35,12 +37,8 @@ public class TerminationPointChangeListenerImpl extends DataChangeListenerImpl { private final static Logger LOG = LoggerFactory.getLogger(TerminationPointChangeListenerImpl.class); public TerminationPointChangeListenerImpl(final DataBroker dataBroker, final OperationProcessor operationProcessor) { - super(operationProcessor, dataBroker, - InstanceIdentifier.builder(Nodes.class) - .child(Node.class) - .child(NodeConnector.class) - .augmentation(FlowCapableNodeConnector.class) - .build()); + super(operationProcessor, dataBroker, InstanceIdentifier.builder(Nodes.class).child(Node.class) + .child(NodeConnector.class).augmentation(FlowCapableNodeConnector.class).build()); this.operationProcessor = operationProcessor; } @@ -56,7 +54,8 @@ public class TerminationPointChangeListenerImpl extends DataChangeListenerImpl { */ private void processRemovedTerminationPoints(Set> removedNodes) { for (final InstanceIdentifier removedNode : removedNodes) { - InstanceIdentifier iiToTopologyTerminationPoint = provideIIToTopologyTerminationPoint(provideTopologyTerminationPointId(removedNode), removedNode); + InstanceIdentifier iiToTopologyTerminationPoint = provideIIToTopologyTerminationPoint( + provideTopologyTerminationPointId(removedNode), removedNode); if (iiToTopologyTerminationPoint != null) { operationProcessor.enqueueOperation(new TopologyOperation() { @@ -86,26 +85,39 @@ public class TerminationPointChangeListenerImpl extends DataChangeListenerImpl { } protected void createData(InstanceIdentifier iiToNodeInInventory, final DataObject data) { - final TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(); - TpId terminationPointIdInTopology = provideTopologyTerminationPointId(iiToNodeInInventory); if (terminationPointIdInTopology != null) { - terminationPointBuilder.setTpId(terminationPointIdInTopology); - InstanceIdentifier iiToTopologyTerminationPoint = provideIIToTopologyTerminationPoint(terminationPointIdInTopology, iiToNodeInInventory); - sendToTransactionChain(terminationPointBuilder.build(), iiToTopologyTerminationPoint); + InstanceIdentifier iiToTopologyTerminationPoint = provideIIToTopologyTerminationPoint( + terminationPointIdInTopology, iiToNodeInInventory); + sendToTransactionChain(prepareTopologyTerminationPoint(terminationPointIdInTopology, iiToNodeInInventory), + iiToTopologyTerminationPoint); } else { LOG.debug("Inventory node connector key is null. Data can't be written to topology termination point"); } } + private TerminationPoint prepareTopologyTerminationPoint(final TpId terminationPointIdInTopology, + final InstanceIdentifier iiToNodeInInventory) { + final InventoryNodeConnector inventoryNodeConnector = new InventoryNodeConnectorBuilder() + .setInventoryNodeConnectorRef( + new NodeConnectorRef(iiToNodeInInventory.firstIdentifierOf(NodeConnector.class))).build(); + + final TerminationPointBuilder terminationPointBuilder = new TerminationPointBuilder(); + terminationPointBuilder.setTpId(terminationPointIdInTopology); + terminationPointBuilder.addAugmentation(InventoryNodeConnector.class, inventoryNodeConnector); + return terminationPointBuilder.build(); + } + /** * @param terminationPointIdInTopology * @return */ - private InstanceIdentifier provideIIToTopologyTerminationPoint(TpId terminationPointIdInTopology, InstanceIdentifier iiToNodeInInventory) { + private InstanceIdentifier provideIIToTopologyTerminationPoint(TpId terminationPointIdInTopology, + InstanceIdentifier iiToNodeInInventory) { NodeId nodeIdInTopology = provideTopologyNodeId(iiToNodeInInventory); InstanceIdentifier iiToTopologyNode = provideIIToTopologyNode(nodeIdInTopology); - return iiToTopologyNode.builder().child(TerminationPoint.class, new TerminationPointKey(terminationPointIdInTopology)).build(); + return iiToTopologyNode.builder() + .child(TerminationPoint.class, new TerminationPointKey(terminationPointIdInTopology)).build(); } /** @@ -113,7 +125,8 @@ public class TerminationPointChangeListenerImpl extends DataChangeListenerImpl { * @return */ private TpId provideTopologyTerminationPointId(InstanceIdentifier iiToNodeInInventory) { - NodeConnectorKey inventoryNodeConnectorKey = iiToNodeInInventory.firstKeyOf(NodeConnector.class, NodeConnectorKey.class); + NodeConnectorKey inventoryNodeConnectorKey = iiToNodeInInventory.firstKeyOf(NodeConnector.class, + NodeConnectorKey.class); if (inventoryNodeConnectorKey != null) { return new TpId(inventoryNodeConnectorKey.getId().getValue()); } -- 2.36.6