From 21e7a7e129e3f0a2e6141affebc0adeebcca606c Mon Sep 17 00:00:00 2001 From: Ed Warnicke Date: Tue, 24 Feb 2015 10:17:21 -0700 Subject: [PATCH] Added Removal of bridges from operational store Change-Id: I48d830e619fe982724d11ca66283bfd77ad5bf15 Signed-off-by: Ed Warnicke --- .../southbound-api/src/main/yang/ovsdb.yang | 7 ++- .../ovsdb/southbound/SouthboundMapper.java | 17 ++++++ .../md/OvsdbBridgeRemovedCommand.java | 52 +++++++++++++++++++ .../md/OvsdbBridgeUpdateCommand.java | 17 +++--- .../md/OvsdbNodeRemoveCommand.java | 5 +- .../md/OvsdbOperationalCommandAggregator.java | 1 + 6 files changed, 84 insertions(+), 15 deletions(-) create mode 100644 southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java diff --git a/southbound/southbound-api/src/main/yang/ovsdb.yang b/southbound/southbound-api/src/main/yang/ovsdb.yang index 31d1e4f57..aea4501bc 100644 --- a/southbound/southbound-api/src/main/yang/ovsdb.yang +++ b/southbound/southbound-api/src/main/yang/ovsdb.yang @@ -43,8 +43,11 @@ module ovsdb { grouping ovsdb-node-attributes { uses overlay:ip-port-locator; - leaf-list managed-node-entry { - type ovsdb-bridge-ref; + list managed-node-entry { + key "bridge-ref"; + leaf bridge-ref { + type ovsdb-bridge-ref; + } } } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java index 0cb54f456..c70574250 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java @@ -84,6 +84,23 @@ public class SouthboundMapper { return createInstanceIdentifier(createIpAddress(client.getConnectionInfo().getRemoteAddress()), new PortNumber(client.getConnectionInfo().getRemotePort())); } + + public static InstanceIdentifier createInstanceIdentifier(NodeId nodeId) { + InstanceIdentifier nodePath = InstanceIdentifier + .create(NetworkTopology.class) + .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) + .child(Node.class,new NodeKey(nodeId)); + return nodePath; + } + + public static InstanceIdentifier createInstanceIdentifier(OvsdbClientKey key,UUID uuid) { + return createInstanceIdentifier(createManagedNodeId(key, uuid)); + } + + public static InstanceIdentifier createInstanceIndentifier(OvsdbClientKey key) { + return createInstanceIdentifier(key.getIp(), key.getPort()); + } + public static InstanceIdentifier createInstanceIdentifier(IpAddress ip, PortNumber port) { InstanceIdentifier path = InstanceIdentifier .create(NetworkTopology.class) diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java new file mode 100644 index 000000000..cdf383dff --- /dev/null +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java @@ -0,0 +1,52 @@ +package org.opendaylight.ovsdb.southbound.transactions.md; + +import java.util.List; + +import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction; +import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType; +import org.opendaylight.ovsdb.lib.message.TableUpdates; +import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; +import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable; +import org.opendaylight.ovsdb.schema.openvswitch.Bridge; +import org.opendaylight.ovsdb.southbound.OvsdbClientKey; +import org.opendaylight.ovsdb.southbound.SouthboundMapper; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryKey; +import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; +import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +public class OvsdbBridgeRemovedCommand implements TransactionCommand { + private static final Logger LOG = LoggerFactory.getLogger(OvsdbBridgeUpdateCommand.class); + + private TableUpdates updates; + private DatabaseSchema dbSchema; + + private OvsdbClientKey key; + + public OvsdbBridgeRemovedCommand(OvsdbClientKey key,TableUpdates updates, DatabaseSchema dbSchema) { + this.updates = updates; + this.dbSchema = dbSchema; + this.key = key; + } + @Override + public void execute(ReadWriteTransaction transaction) { + List> removedRows = TransactionUtils.extractRowsRemoved(Bridge.class, updates, dbSchema); + for(TypedBaseTable removedRow : removedRows) { + if(removedRow instanceof Bridge) { + Bridge bridge = (Bridge)removedRow; + InstanceIdentifier bridgeIid = SouthboundMapper.createInstanceIdentifier(key, bridge.getUuid()); + InstanceIdentifier mnIid = SouthboundMapper.createInstanceIndentifier(key) + .augmentation(OvsdbNodeAugmentation.class) + .child(ManagedNodeEntry.class, new ManagedNodeEntryKey(new OvsdbBridgeRef(bridgeIid))); + // TODO handle removal of reference to managed node from model + transaction.delete(LogicalDatastoreType.OPERATIONAL, bridgeIid); + transaction.delete(LogicalDatastoreType.OPERATIONAL, mnIid); + } + } + } + +} diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java index 6afe67ba8..5670f8de5 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java @@ -11,7 +11,6 @@ import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; import org.opendaylight.ovsdb.lib.schema.typed.TypedBaseTable; import org.opendaylight.ovsdb.schema.openvswitch.Bridge; import org.opendaylight.ovsdb.southbound.OvsdbClientKey; -import org.opendaylight.ovsdb.southbound.SouthboundConstants; import org.opendaylight.ovsdb.southbound.SouthboundMapper; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.yang.types.rev130715.Uuid; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef; @@ -20,13 +19,11 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.re import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentationBuilder; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeRef; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.NetworkTopology; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntryBuilder; 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; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.TopologyKey; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeBuilder; -import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.NodeKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -71,10 +68,7 @@ public class OvsdbBridgeUpdateCommand implements TransactionCommand { ovsdbManagedNodeBuilder.setManagedBy(new OvsdbNodeRef(nodePath)); managedNodeBuilder.addAugmentation(OvsdbManagedNodeAugmentation.class, ovsdbManagedNodeBuilder.build()); - InstanceIdentifier managedNodePath = InstanceIdentifier - .create(NetworkTopology.class) - .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID)) - .child(Node.class,new NodeKey(manageNodeId)); + InstanceIdentifier managedNodePath = SouthboundMapper.createInstanceIdentifier(manageNodeId); LOG.debug("Store managed node augmentation data {}",ovsdbManagedNodeBuilder.toString()); transaction.put(LogicalDatastoreType.OPERATIONAL, managedNodePath, managedNodeBuilder.build()); @@ -84,8 +78,9 @@ public class OvsdbBridgeUpdateCommand implements TransactionCommand { nodeBuilder.setNodeId(SouthboundMapper.createNodeId(key.getIp(),key.getPort())); OvsdbNodeAugmentationBuilder ovsdbNodeBuilder = new OvsdbNodeAugmentationBuilder(); - List managedNodes = new ArrayList(); - managedNodes.add(new OvsdbBridgeRef(managedNodePath)); + List managedNodes = new ArrayList(); + ManagedNodeEntry entry = new ManagedNodeEntryBuilder().setBridgeRef(new OvsdbBridgeRef(managedNodePath)).build(); + managedNodes.add(entry); ovsdbNodeBuilder.setManagedNodeEntry(managedNodes); nodeBuilder.addAugmentation(OvsdbNodeAugmentation.class, ovsdbNodeBuilder.build()); diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java index 2b1be530c..884fd8f9c 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java @@ -8,6 +8,7 @@ import org.opendaylight.ovsdb.lib.schema.DatabaseSchema; import org.opendaylight.ovsdb.southbound.OvsdbClientKey; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeRef; import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbNodeAugmentation; +import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.ovsdb.node.attributes.ManagedNodeEntry; import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -33,8 +34,8 @@ public class OvsdbNodeRemoveCommand implements TransactionCommand { if(ovsdbNodeOptional.isPresent()) { Node ovsdbNode = ovsdbNodeOptional.get(); OvsdbNodeAugmentation ovsdbNodeAugmentation = ovsdbNode.getAugmentation(OvsdbNodeAugmentation.class); - for(OvsdbBridgeRef managedNode: ovsdbNodeAugmentation.getManagedNodeEntry()) { - transaction.delete(LogicalDatastoreType.OPERATIONAL, managedNode.getValue()); + for(ManagedNodeEntry managedNode: ovsdbNodeAugmentation.getManagedNodeEntry()) { + transaction.delete(LogicalDatastoreType.OPERATIONAL, managedNode.getBridgeRef().getValue()); } transaction.delete(LogicalDatastoreType.OPERATIONAL, key.toInstanceIndentifier()); } diff --git a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbOperationalCommandAggregator.java b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbOperationalCommandAggregator.java index 1450ec4bd..e3fdaecff 100644 --- a/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbOperationalCommandAggregator.java +++ b/southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbOperationalCommandAggregator.java @@ -15,6 +15,7 @@ public class OvsdbOperationalCommandAggregator implements TransactionCommand { public OvsdbOperationalCommandAggregator(OvsdbClientKey key,TableUpdates updates, DatabaseSchema dbSchema) { commands.add(new OvsdbBridgeUpdateCommand(key, updates, dbSchema)); + commands.add(new OvsdbBridgeRemovedCommand(key, updates, dbSchema)); } @Override -- 2.36.6