Fixed few things: 00/19900/2
authorAnil Vishnoi <vishnoianil@gmail.com>
Fri, 8 May 2015 13:03:15 +0000 (18:33 +0530)
committerAnil Vishnoi <vishnoianil@gmail.com>
Fri, 8 May 2015 14:27:55 +0000 (19:57 +0530)
** Added support for deleting bridge from config data store
to keep configuration sane
*.* Fixed bridge creation (it was not creating integration bridge
when second compute node connects

Change-Id: I4233886f875b188f7d5d7e68fe8e0076b4365d82
Signed-off-by: Anil Vishnoi <vishnoianil@gmail.com>
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/MdsalUtils.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundEvent.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java

index 721eee403c20cf0e262eb7abef01d8ace80cb32c..be6f5ae012ec690ef0b72019b1eee9a987ed4f84 100644 (file)
@@ -210,7 +210,7 @@ public class MdsalUtils {
             throws InterruptedException, InvalidParameterException {
         boolean result = false;
 
-        LOG.info("addBridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target);
+        LOG.info("Add Bridge: node: {}, bridgeName: {}, target: {}", ovsdbNode, bridgeName, target);
         ConnectionInfo connectionInfo = getConnectionInfo(ovsdbNode);
         if (connectionInfo != null) {
             NodeBuilder bridgeNodeBuilder = new NodeBuilder();
@@ -219,7 +219,7 @@ public class MdsalUtils {
             NodeId bridgeNodeId = SouthboundMapper.createManagedNodeId(bridgeIid);
             bridgeNodeBuilder.setNodeId(bridgeNodeId);
             OvsdbBridgeAugmentationBuilder ovsdbBridgeAugmentationBuilder = new OvsdbBridgeAugmentationBuilder();
-            //ovsdbBridgeAugmentationBuilder.setControllerEntry(setControllerEntries(target));
+            ovsdbBridgeAugmentationBuilder.setControllerEntry(createControllerEntries(target));
             ovsdbBridgeAugmentationBuilder.setBridgeName(new OvsdbBridgeName(bridgeName));
             ovsdbBridgeAugmentationBuilder.setProtocolEntry(createMdsalProtocols());
             ovsdbBridgeAugmentationBuilder.setFailMode(
@@ -227,17 +227,24 @@ public class MdsalUtils {
             setManagedByForBridge(ovsdbBridgeAugmentationBuilder, connectionInfo);
             bridgeNodeBuilder.addAugmentation(OvsdbBridgeAugmentation.class, ovsdbBridgeAugmentationBuilder.build());
 
-            result = merge(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
+            result = put(LogicalDatastoreType.CONFIGURATION, bridgeIid, bridgeNodeBuilder.build());
             LOG.info("addBridge: result: {}", result);
-            Thread.sleep(OVSDB_UPDATE_TIMEOUT);
-            setControllerForBridge(ovsdbNode, bridgeName, target);
-            Thread.sleep(OVSDB_UPDATE_TIMEOUT);
         } else {
             throw new InvalidParameterException("Could not find ConnectionInfo");
         }
         return result;
     }
 
+    public static boolean deleteBridge(Node ovsdbNode) {
+        boolean result = false;
+        InstanceIdentifier<Node> bridgeIid =
+                SouthboundMapper.createInstanceIdentifier(ovsdbNode.getNodeId());
+
+        result = delete(LogicalDatastoreType.CONFIGURATION, bridgeIid);
+        LOG.info("Delete bridge node: {}, bridgeName: {} result : {}", ovsdbNode, ovsdbNode.getNodeId(),result);
+        return result;
+    }
+
     public static OvsdbBridgeAugmentation readBridge(Node node, String name) {
         OvsdbBridgeAugmentation ovsdbBridgeAugmentation = null;
         ConnectionInfo connectionInfo = getConnectionInfo(node);
index 122d870e803c8037a4bd65b75c20c8605a41af76..afcbb8e6c55821018769c0797843598b282f60cb 100644 (file)
@@ -13,6 +13,7 @@ import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbTerminationPointAugmentation;
 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.DataObject;
 
 public class SouthboundEvent extends AbstractEvent {
     public enum Type { NODE, OPENVSWITCH, BRIDGE, CONTROLLER, PORT }
@@ -21,6 +22,7 @@ public class SouthboundEvent extends AbstractEvent {
     private String tableName;
     private String uuid;
     private Object context;
+    private DataObject augmentationData;
     private OvsdbBridgeAugmentation bridge;
     private OvsdbTerminationPointAugmentation port;
     private String portName;
@@ -42,12 +44,21 @@ public class SouthboundEvent extends AbstractEvent {
         this.port = port;
         this.portName = portName;
     }
+
     public SouthboundEvent(Node node, Type type, Action action) {
         super(HandlerType.SOUTHBOUND, action);
         this.type = type;
         this.node = node;
     }
 
+    public SouthboundEvent(Node node, DataObject resourceAugmentationData, Type type, Action action) {
+        super(HandlerType.SOUTHBOUND, action);
+        this.type = type;
+        this.node = node;
+        this.augmentationData = resourceAugmentationData;
+    }
+
+
     public Type getType() {
         return type;
     }
@@ -72,11 +83,17 @@ public class SouthboundEvent extends AbstractEvent {
     public String getPortName() {
         return portName;
     }
+
+    public DataObject getAugmentationData() {
+        return augmentationData;
+    }
+
     @Override
     public String toString() {
         //if (type == Type.NODE) {
             return "SouthboundEvent [type=" + type
                     + ", action=" + super.getAction()
+                    + ",augmentationData="+augmentationData
                     + ", node=" + node + "]";
         //} else {
         //    return "SouthboundEvent [type=" + type + "]";
@@ -91,6 +108,7 @@ public class SouthboundEvent extends AbstractEvent {
         result = prime * result + ((tableName == null) ? 0 : tableName.hashCode());
         result = prime * result + ((type == null) ? 0 : type.hashCode());
         result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());
+        result = prime * result + ((augmentationData == null) ? 0 : augmentationData.hashCode());
         return result;
     }
     @Override
index 3d99e013dded3eac2fc97bd668e64f011b5da7e3..db89f59057c5a79cae9bbebfba6540095d655800 100644 (file)
@@ -9,15 +9,18 @@ package org.opendaylight.ovsdb.openstack.netvirt;
 
 import java.util.List;
 
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.ovsdb.openstack.netvirt.api.*;
 import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
 import org.opendaylight.ovsdb.southbound.SouthboundMapper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.ovsdb.rev150105.OvsdbBridgeAugmentation;
+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.OvsdbTerminationPointAugmentation;
 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.node.TerminationPoint;
 import org.opendaylight.yangtools.yang.binding.DataObject;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -76,18 +79,36 @@ public class SouthboundHandler extends AbstractHandler
     @Override
     public void ovsdbUpdate(Node node, DataObject resourceAugmentationData, OvsdbType ovsdbType, Action action) {
         logger.info("ovsdbUpdate: {} - {} - {}", node, ovsdbType, action);
-        this.enqueueEvent(new SouthboundEvent(node, ovsdbTypeToSouthboundEventType(ovsdbType), action));
+        this.enqueueEvent(new SouthboundEvent(node, resourceAugmentationData, ovsdbTypeToSouthboundEventType(ovsdbType), action));
     }
 
     public void processOvsdbNodeUpdate(Node node, Action action) {
-        if (action == Action.ADD) {
+        switch (action) {
+        case ADD:
             logger.info("processOvsdbNodeUpdate {}", node);
             bridgeConfigurationManager.prepareNode(node);
+            break;
+        case UPDATE:
+            break;
+        case DELETE:
+            processNodeDelete(node);
+            break;
+    }
+        if (action == Action.ADD) {
         } else {
             logger.info("Not implemented yet: {}", action);
         }
     }
 
+    private void processNodeDelete(Node node) {
+        OvsdbNodeAugmentation nodeAugmentation = node.getAugmentation(OvsdbNodeAugmentation.class);
+        if(nodeAugmentation != null){
+            InstanceIdentifier<Node> bridgeNodeIid =
+                    MdsalHelper.createInstanceIdentifier(nodeAugmentation.getConnectionInfo(), Constants.INTEGRATION_BRIDGE);
+            MdsalUtils.delete(LogicalDatastoreType.CONFIGURATION, bridgeNodeIid);
+        }
+    }
+
     private void handleInterfaceUpdate (Node node, OvsdbTerminationPointAugmentation tp) {
         logger.trace("handleInterfaceUpdate node: {}, tp: {}", node, tp);
         NeutronNetwork network = tenantNetworkManager.getTenantNetwork(tp);
@@ -320,8 +341,9 @@ public class SouthboundHandler extends AbstractHandler
         }
     }
 
-    private void processBridgeDelete(Node node, OvsdbBridgeAugmentation bridge) {
-        logger.debug("processBridgeUpdate {}, {}", node, bridge);
+    private void processBridgeDelete(Node bridgeNode, OvsdbBridgeAugmentation bridge) {
+        logger.debug("Delete bridge from config data store : {}", bridgeNode.getNodeId());
+        MdsalUtils.deleteBridge(bridgeNode);
     }
 
     private void processBridgeUpdate(Node node, OvsdbBridgeAugmentation bridge) {