Added Removal of bridges from operational store 77/15677/2
authorEd Warnicke <eaw@cisco.com>
Tue, 24 Feb 2015 17:17:21 +0000 (10:17 -0700)
committerEd Warnicke <eaw@cisco.com>
Tue, 24 Feb 2015 17:59:34 +0000 (10:59 -0700)
Change-Id: I48d830e619fe982724d11ca66283bfd77ad5bf15
Signed-off-by: Ed Warnicke <eaw@cisco.com>
southbound/southbound-api/src/main/yang/ovsdb.yang
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/SouthboundMapper.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeRemovedCommand.java [new file with mode: 0644]
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbBridgeUpdateCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbNodeRemoveCommand.java
southbound/southbound-impl/src/main/java/org/opendaylight/ovsdb/southbound/transactions/md/OvsdbOperationalCommandAggregator.java

index 31d1e4f5705a84795fefdd435ccdc6fb036a461b..aea4501bc7d9689b69812f0184469552167e355f 100644 (file)
@@ -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;
+            }
         }
     }
 
index 0cb54f4560a7e4f0e061754750339ce549fcd86c..c70574250a457fe60fa062ee0eb83c70cd4a1a9a 100644 (file)
@@ -84,6 +84,23 @@ public class SouthboundMapper {
         return createInstanceIdentifier(createIpAddress(client.getConnectionInfo().getRemoteAddress()),
                 new PortNumber(client.getConnectionInfo().getRemotePort()));
     }
+
+    public static InstanceIdentifier<Node> createInstanceIdentifier(NodeId nodeId) {
+        InstanceIdentifier<Node> 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<Node> createInstanceIdentifier(OvsdbClientKey key,UUID uuid) {
+        return createInstanceIdentifier(createManagedNodeId(key, uuid));
+    }
+
+    public static InstanceIdentifier<Node> createInstanceIndentifier(OvsdbClientKey key) {
+        return createInstanceIdentifier(key.getIp(), key.getPort());
+    }
+
     public static InstanceIdentifier<Node> createInstanceIdentifier(IpAddress ip, PortNumber port) {
         InstanceIdentifier<Node> 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 (file)
index 0000000..cdf383d
--- /dev/null
@@ -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<TypedBaseTable<?>> removedRows = TransactionUtils.extractRowsRemoved(Bridge.class, updates, dbSchema);
+        for(TypedBaseTable<?> removedRow : removedRows) {
+            if(removedRow instanceof Bridge) {
+                Bridge bridge = (Bridge)removedRow;
+                InstanceIdentifier<Node> bridgeIid = SouthboundMapper.createInstanceIdentifier(key, bridge.getUuid());
+                InstanceIdentifier<ManagedNodeEntry> 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);
+            }
+        }
+    }
+
+}
index 6afe67ba82540a7cf8ab02e5d1ce104dfd43b955..5670f8de5f718a984c001aabc250fc3b20602236 100644 (file)
@@ -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<Node> managedNodePath = InstanceIdentifier
-                            .create(NetworkTopology.class)
-                            .child(Topology.class, new TopologyKey(SouthboundConstants.OVSDB_TOPOLOGY_ID))
-                            .child(Node.class,new NodeKey(manageNodeId));
+                    InstanceIdentifier<Node> 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<OvsdbBridgeRef> managedNodes = new ArrayList<OvsdbBridgeRef>();
-                    managedNodes.add(new OvsdbBridgeRef(managedNodePath));
+                    List<ManagedNodeEntry> managedNodes = new ArrayList<ManagedNodeEntry>();
+                    ManagedNodeEntry entry = new ManagedNodeEntryBuilder().setBridgeRef(new OvsdbBridgeRef(managedNodePath)).build();
+                    managedNodes.add(entry);
                     ovsdbNodeBuilder.setManagedNodeEntry(managedNodes);
 
                     nodeBuilder.addAugmentation(OvsdbNodeAugmentation.class, ovsdbNodeBuilder.build());
index 2b1be530cfc2eba37ce07b49cda0a9e45c9d6d07..884fd8f9c2e284ddf4ee0da7fd78a536fc55b52c 100644 (file)
@@ -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());
             }
index 1450ec4bde643d56cb0d92b2e4d0bb1b8232b391..e3fdaecfff7269048709dc3fb56c51baed4de373 100644 (file)
@@ -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