Ovsdb plugin compatibility layer
[netvirt.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / NetworkHandler.java
index 1aaa4c678ff5e3ff6fe9a4a4cd35327de0251d2f..a21e0a78787e4c99343a1bfe66eef67802121d43 100644 (file)
@@ -9,18 +9,20 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt;
 
-import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkAware;
-import org.opendaylight.controller.networkconfig.neutron.INeutronNetworkCRUD;
-import org.opendaylight.controller.networkconfig.neutron.NeutronNetwork;
+import org.opendaylight.neutron.spi.INeutronNetworkAware;
+import org.opendaylight.neutron.spi.INeutronNetworkCRUD;
+import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.controller.sal.core.Node;
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.notation.UUID;
+import org.opendaylight.ovsdb.openstack.netvirt.api.Action;
 import org.opendaylight.ovsdb.openstack.netvirt.api.BridgeConfigurationManager;
 import org.opendaylight.ovsdb.openstack.netvirt.api.ConfigurationService;
 import org.opendaylight.ovsdb.openstack.netvirt.api.TenantNetworkManager;
-import org.opendaylight.ovsdb.plugin.IConnectionServiceInternal;
-import org.opendaylight.ovsdb.plugin.OvsdbConfigService;
-import org.opendaylight.ovsdb.plugin.OvsdbInventoryListener;
+import org.opendaylight.ovsdb.openstack.netvirt.impl.NeutronL3Adapter;
+import org.opendaylight.ovsdb.compatibility.plugin.api.OvsdbConfigurationService;
+import org.opendaylight.ovsdb.compatibility.plugin.api.OvsdbConnectionService;
+import org.opendaylight.ovsdb.compatibility.plugin.api.OvsdbInventoryListener;
 import org.opendaylight.ovsdb.schema.openvswitch.Interface;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
 
@@ -50,10 +52,11 @@ public class NetworkHandler extends AbstractHandler
     private volatile TenantNetworkManager tenantNetworkManager;
     private volatile BridgeConfigurationManager bridgeConfigurationManager;
     private volatile ConfigurationService configurationService;
-    private volatile OvsdbConfigService ovsdbConfigService;
-    private volatile IConnectionServiceInternal connectionService;
+    private volatile OvsdbConfigurationService ovsdbConfigurationService;
+    private volatile OvsdbConnectionService connectionService;
     private volatile INeutronNetworkCRUD neutronNetworkCache;
-    private volatile OvsdbInventoryListener inventoryListener;
+    private volatile OvsdbInventoryListener ovsdbInventoryListener;
+    private volatile NeutronL3Adapter neutronL3Adapter;
 
     /**
      * Invoked when a network creation is requested
@@ -87,6 +90,10 @@ public class NetworkHandler extends AbstractHandler
             return;
         }
 
+        enqueueEvent(new NorthboundEvent(network, Action.ADD));
+    }
+    private void doNeutronNetworkCreated(NeutronNetwork network) {
+        neutronL3Adapter.handleNeutronNetworkEvent(network, Action.ADD);
     }
 
     /**
@@ -113,8 +120,10 @@ public class NetworkHandler extends AbstractHandler
      */
     @Override
     public void neutronNetworkUpdated(NeutronNetwork network) {
-        logger.trace("neutronNetworkUpdated: network: {}", network);
-        return;
+        enqueueEvent(new NorthboundEvent(network, Action.UPDATE));
+    }
+    private void doNeutronNetworkUpdated(NeutronNetwork network) {
+        neutronL3Adapter.handleNeutronNetworkEvent(network, Action.UPDATE);
     }
 
     /**
@@ -136,6 +145,10 @@ public class NetworkHandler extends AbstractHandler
      */
     @Override
     public void neutronNetworkDeleted(NeutronNetwork network) {
+        enqueueEvent(new NorthboundEvent(network, Action.DELETE));
+    }
+    private void doNeutronNetworkDeleted(NeutronNetwork network) {
+        neutronL3Adapter.handleNeutronNetworkEvent(network, Action.DELETE);
 
         int result = canDeleteNetwork(network);
         logger.trace("canDeleteNetwork: network: {}", network);
@@ -156,31 +169,31 @@ public class NetworkHandler extends AbstractHandler
                     List<String> phyIfName = bridgeConfigurationManager.getAllPhysicalInterfaceNames(node);
                     try {
                         ConcurrentMap<String, Row> ports =
-                                this.ovsdbConfigService.getRows(node,
-                                                                ovsdbConfigService.getTableName(node, Port.class));
+                                this.ovsdbConfigurationService.getRows(node,
+                                                                ovsdbConfigurationService.getTableName(node, Port.class));
                         if (ports != null) {
                             for (Row portRow : ports.values()) {
-                                Port port = ovsdbConfigService.getTypedRow(node, Port.class, portRow);
+                                Port port = ovsdbConfigurationService.getTypedRow(node, Port.class, portRow);
                                 for (UUID interfaceUuid : port.getInterfacesColumn().getData()) {
-                                    Interface interfaceRow = (Interface) ovsdbConfigService
+                                    Row ifaceRow = ovsdbConfigurationService
                                             .getRow(node,
-                                                    ovsdbConfigService.getTableName(node, Interface.class),
+                                                    ovsdbConfigurationService.getTableName(node, Interface.class),
                                                     interfaceUuid.toString());
-
-                                    String interfaceType = interfaceRow.getTypeColumn().getData();
+                                    Interface iface = ovsdbConfigurationService.getTypedRow(node, Interface.class, ifaceRow);
+                                    String interfaceType = iface.getTypeColumn().getData();
                                     if (interfaceType.equalsIgnoreCase(NetworkHandler.NETWORK_TYPE_VXLAN)
                                         || interfaceType.equalsIgnoreCase(
                                             NetworkHandler.NETWORK_TYPE_GRE)) {
                                         /* delete tunnel ports on this node */
-                                        logger.trace("Delete tunnel interface {}", interfaceRow);
-                                        ovsdbConfigService.deleteRow(node,
-                                                                     ovsdbConfigService.getTableName(node, Port.class),
+                                        logger.trace("Delete tunnel interface {}", iface.getName());
+                                        ovsdbConfigurationService.deleteRow(node,
+                                                                     ovsdbConfigurationService.getTableName(node, Port.class),
                                                                      port.getUuid().toString());
                                         break;
-                                    } else if (!phyIfName.isEmpty() && phyIfName.contains(interfaceRow.getName())) {
-                                        logger.trace("Delete physical interface {}", interfaceRow);
-                                        ovsdbConfigService.deleteRow(node,
-                                                                     ovsdbConfigService.getTableName(node, Port.class),
+                                    } else if (!phyIfName.isEmpty() && phyIfName.contains(iface.getName())) {
+                                        logger.trace("Delete physical interface {}", iface.getName());
+                                        ovsdbConfigurationService.deleteRow(node,
+                                                                     ovsdbConfigurationService.getTableName(node, Port.class),
                                                                      port.getUuid().toString());
                                         break;
                                     }
@@ -188,11 +201,41 @@ public class NetworkHandler extends AbstractHandler
                             }
                         }
                     } catch (Exception e) {
-                        logger.error("Exception during handlingNeutron network delete");
+                        logger.error("Exception during handlingNeutron network delete", e);
                     }
                 }
             }
         }
         tenantNetworkManager.networkDeleted(network.getID());
     }
+
+    /**
+     * Process the event.
+     *
+     * @param abstractEvent the {@link org.opendaylight.ovsdb.openstack.netvirt.AbstractEvent} event to be handled.
+     * @see org.opendaylight.ovsdb.openstack.netvirt.api.EventDispatcher
+     */
+    @Override
+    public void processEvent(AbstractEvent abstractEvent) {
+        if (!(abstractEvent instanceof NorthboundEvent)) {
+            logger.error("Unable to process abstract event " + abstractEvent);
+            return;
+        }
+        NorthboundEvent ev = (NorthboundEvent) abstractEvent;
+        switch (ev.getAction()) {
+            case ADD:
+                doNeutronNetworkCreated(ev.getNeutronNetwork());
+                break;
+            case UPDATE:
+                doNeutronNetworkUpdated(ev.getNeutronNetwork());
+                break;
+            case DELETE:
+                doNeutronNetworkDeleted(ev.getNeutronNetwork());
+                break;
+            default:
+                logger.warn("Unable to process event action " + ev.getAction());
+                break;
+        }
+    }
+
 }