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>
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;
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;
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").
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;
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() {
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() {
*/
package org.opendaylight.ovsdb.neutron;
+import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.BlockingQueue;
}
}
});
+ this.triggerUpdates();
}
void stop() {
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);
+ }
+ }
+ }
}
@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) {