OVSDB support for controller restart scenario to work along with Neutron interface. 80/4380/1
authorMadhu Venugopal <mavenugo@gmail.com>
Sun, 19 Jan 2014 08:52:20 +0000 (00:52 -0800)
committerMadhu Venugopal <mavenugo@gmail.com>
Sun, 19 Jan 2014 08:52:20 +0000 (00:52 -0800)
With the Controller support for neutron config save/restore in, this fix handles the next level
of bootup handling in the ovsdb's neutron handling.
Essentially, the southboundhandler triggers the update for the existing OVSDB connection and that
handles all the programming needs.

Change-Id: Ic72af4eb5d456ac09dcce4eed6bd3cb03804b45f
Signed-off-by: Madhu Venugopal <mavenugo@gmail.com>
neutron/src/main/java/org/opendaylight/ovsdb/neutron/Activator.java
neutron/src/main/java/org/opendaylight/ovsdb/neutron/BaseHandler.java
neutron/src/main/java/org/opendaylight/ovsdb/neutron/SouthboundHandler.java
ovsdb/src/main/java/org/opendaylight/ovsdb/plugin/ConfigurationService.java

index c123714d0ab56e98dfe8bf2c73166ff95c14cb8b..813dc6a2f93f10ca956ed91a546511974a36e757 100644 (file)
@@ -12,6 +12,7 @@ package org.opendaylight.ovsdb.neutron;
 
 import org.apache.felix.dm.Component;
 import org.opendaylight.controller.containermanager.IContainerManager;
+import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
@@ -21,6 +22,7 @@ import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
 import org.opendaylight.controller.sal.binding.api.BindingAwareBroker;
 import org.opendaylight.controller.sal.core.ComponentActivatorAbstractBase;
 import org.opendaylight.controller.switchmanager.IInventoryListener;
+import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
 import org.opendaylight.ovsdb.plugin.OVSDBConfigService;
 import org.opendaylight.ovsdb.plugin.OVSDBInventoryListener;
 
@@ -98,23 +100,33 @@ public class Activator extends ComponentActivatorAbstractBase {
 
         if (imp.equals(MDSALConsumer.class)) {
             c.setInterface(IMDSALConsumer.class.getName(), null);
-
-            c.add(createServiceDependency()
-                    .setService(BindingAwareBroker.class)
-                    .setCallbacks("setBindingAwareBroker", "unsetBindingAwareBroker")
-                    .setRequired(true));
         }
         c.add(createServiceDependency().
                 setService(OVSDBConfigService.class).
                 setCallbacks("setOVSDBConfigService", "unsetOVSDBConfigService").
                 setRequired(true));
 
+        c.add(createServiceDependency().
+                setService(IConnectionServiceInternal.class).
+                setCallbacks("setConnectionService", "unsetConnectionService").
+                setRequired(true));
+
         // Create service dependencies.
         c.add(createServiceDependency().
               setService(IContainerManager.class).
               setCallbacks("setContainerManager", "unsetContainerManager").
               setRequired(true));
 
+        c.add(createServiceDependency().
+                setService(IForwardingRulesManager.class).
+                setCallbacks("setForwardingRulesManager", "unsetForwardingRulesManager").
+                setRequired(true));
+
+        c.add(createServiceDependency()
+                .setService(BindingAwareBroker.class)
+                .setCallbacks("setBindingAwareBroker", "unsetBindingAwareBroker")
+                .setRequired(true));
+
         c.add(createServiceDependency().
                 setService(INeutronNetworkCRUD.class).
                 setCallbacks("setNeutronNetworkCRUD", "unsetNeutronNetworkCRUD").
index 71480a29928b1977ed16f9b46d6dd6ff6868622b..51d3e20db3a40987bba7ad3bc374ea9b503a3402 100644 (file)
@@ -13,11 +13,13 @@ import java.net.HttpURLConnection;
 import java.util.UUID;
 
 import org.opendaylight.controller.containermanager.IContainerManager;
+import org.opendaylight.controller.forwardingrulesmanager.IForwardingRulesManager;
 import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronPortCRUD;
 import org.opendaylight.controller.networkconfig.neutron.INeutronSubnetCRUD;
 import org.opendaylight.controller.sal.utils.Status;
 import org.opendaylight.controller.sal.utils.StatusCode;
+import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
 import org.opendaylight.ovsdb.plugin.OVSDBConfigService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -279,6 +281,22 @@ public class BaseHandler {
         this.containerManager = s;
     }
 
+    protected IForwardingRulesManager frm;
+
+    public IForwardingRulesManager getForwardingRulesManager() {
+        return frm;
+    }
+
+    public void unsetForwardingRulesManager(IForwardingRulesManager s) {
+        if (s == this.frm) {
+            this.frm = null;
+        }
+    }
+
+    public void setForwardingRulesManager(IForwardingRulesManager s) {
+        this.frm = s;
+    }
+
     protected OVSDBConfigService ovsdbConfigService;
 
     public OVSDBConfigService getOVSDBConfigService() {
@@ -295,6 +313,21 @@ public class BaseHandler {
         this.ovsdbConfigService = s;
     }
 
+    protected IConnectionServiceInternal connectionService;
+
+    public IConnectionServiceInternal getConnectionService() {
+        return connectionService;
+    }
+
+    public void unsetConnectionService(IConnectionServiceInternal s) {
+        if (s == this.connectionService) {
+            this.connectionService = null;
+        }
+    }
+
+    public void setConnectionService(IConnectionServiceInternal s) {
+        this.connectionService = s;
+    }
 
     protected INeutronPortCRUD neutronPortCache;
     public INeutronPortCRUD getNeutronPortCRUD() {
index 7b3827246e4fb378fc4b71fb72aa5e8cfa28aa4a..23fe8f9aae77710a110f4bf93b077ca234636705 100644 (file)
@@ -9,6 +9,7 @@
  */
 package org.opendaylight.ovsdb.neutron;
 
+import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.BlockingQueue;
@@ -76,6 +77,7 @@ public class SouthboundHandler extends BaseHandler implements OVSDBInventoryList
                 }
             }
         });
+        this.triggerUpdates();
     }
 
     void stop() {
@@ -249,4 +251,25 @@ public class SouthboundHandler extends BaseHandler implements OVSDBInventoryList
     public void notifyNodeConnector(NodeConnector nodeConnector, UpdateType type, Map<String, Property> propMap) {
         //We are not interested in the nodeConnectors at this moment
     }
+
+    private void triggerUpdates() {
+        List<Node> nodes = this.getConnectionService().getNodes();
+        if (nodes == null) return;
+        for (Node node : nodes) {
+            try {
+                List<String> tableNames = this.getOVSDBConfigService().getTables(node);
+                if (tableNames == null) continue;
+                for (String tableName : tableNames) {
+                    Map<String, Table<?>> rows = this.getOVSDBConfigService().getRows(node, tableName);
+                    if (rows == null) continue;
+                    for (String uuid : rows.keySet()) {
+                        Table<?> row = rows.get(uuid);
+                        this.rowAdded(node, tableName, uuid, row);
+                    }
+                }
+            } catch (Exception e) {
+                logger.error("Exception during OVSDB Southbound update trigger", e);
+            }
+        }
+    }
 }
index 19270ede771d96d8828797fa26ae959f431b5c17..8cf648ca9f802c75c5adc5029fc0fab5ceba93a0 100644 (file)
@@ -889,8 +889,9 @@ public class ConfigurationService implements IPluginInBridgeDomainConfigService,
 
     @Override
     public List<String> getTables(Node node) {
-        // TODO Auto-generated method stub
-        return null;
+        Map<String, Map<String, Table<?>>> cache  = inventoryServiceInternal.getCache(node);
+        if (cache == null) return null;
+        return new ArrayList<String>(cache.keySet());
     }
 
     private StatusWithUuid insertBridgeRow(Node node, String open_VSwitch_uuid, Bridge bridgeRow) {