Ovsdb plugin compatibility layer
[ovsdb.git] / openstack / net-virt / src / main / java / org / opendaylight / ovsdb / openstack / netvirt / PortHandler.java
index 0675a34b01cf7d292b5f85bea3756b01704174fd..1d55cb33cba7798187adfc851b37ad1567769438 100644 (file)
@@ -9,15 +9,17 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt;
 
-import org.opendaylight.controller.networkconfig.neutron.INeutronPortAware;
-import org.opendaylight.controller.networkconfig.neutron.NeutronPort;
+import org.opendaylight.neutron.spi.INeutronPortAware;
+import org.opendaylight.neutron.spi.NeutronPort;
 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.Constants;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConfigurationService;
-import org.opendaylight.ovsdb.plugin.api.OvsdbConnectionService;
-import org.opendaylight.ovsdb.plugin.api.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;
 
@@ -44,6 +46,7 @@ public class PortHandler extends AbstractHandler
     private volatile OvsdbConfigurationService ovsdbConfigurationService;
     private volatile OvsdbConnectionService connectionService;
     private volatile OvsdbInventoryListener ovsdbInventoryListener;
+    private volatile NeutronL3Adapter neutronL3Adapter;
 
     /**
      * Invoked when a port creation is requested
@@ -63,20 +66,21 @@ public class PortHandler extends AbstractHandler
      * @param port An instance of new Neutron Port object.
      */
     @Override
-    public void neutronPortCreated(NeutronPort port) {
-        int result = canCreatePort(port);
+    public void neutronPortCreated(NeutronPort neutronPort) {
+        int result = canCreatePort(neutronPort);
         if (result != HttpURLConnection.HTTP_CREATED) {
             logger.error(" Port create validation failed result - {} ", result);
             return;
         }
 
-        enqueueEvent(new NorthboundEvent(port, NorthboundEvent.Action.ADD));
+        enqueueEvent(new NorthboundEvent(neutronPort, Action.ADD));
     }
-    private void doNeutronPortCreated(NeutronPort port) {
+    private void doNeutronPortCreated(NeutronPort neutronPort) {
         logger.debug(" Port-ADD successful for tenant-id - {}," +
                      " network-id - {}, port-id - {}",
-                     port.getTenantID(), port.getNetworkUUID(),
-                     port.getID());
+                     neutronPort.getTenantID(), neutronPort.getNetworkUUID(),
+                     neutronPort.getID());
+        neutronL3Adapter.handleNeutronPortEvent(neutronPort, Action.ADD);
     }
 
     /**
@@ -110,7 +114,12 @@ public class PortHandler extends AbstractHandler
      * @param port An instance of modified Neutron Port object.
      */
     @Override
-    public void neutronPortUpdated(NeutronPort port) {
+    public void neutronPortUpdated(NeutronPort neutronPort) {
+        enqueueEvent(new NorthboundEvent(neutronPort, Action.UPDATE));
+    }
+    private void doNeutronPortUpdated(NeutronPort neutronPort) {
+        logger.debug("Handling neutron update port " + neutronPort);
+        neutronL3Adapter.handleNeutronPortEvent(neutronPort, Action.UPDATE);
     }
 
     /**
@@ -139,10 +148,11 @@ public class PortHandler extends AbstractHandler
             return;
         }
 
-        enqueueEvent(new NorthboundEvent(neutronPort, NorthboundEvent.Action.DELETE));
+        enqueueEvent(new NorthboundEvent(neutronPort, Action.DELETE));
     }
     private void doNeutronPortDeleted(NeutronPort neutronPort) {
         logger.debug("Handling neutron delete port " + neutronPort);
+        neutronL3Adapter.handleNeutronPortEvent(neutronPort, Action.DELETE);
 
         List<Node> nodes = connectionService.getNodes();
         for (Node node : nodes) {
@@ -154,15 +164,15 @@ public class PortHandler extends AbstractHandler
                     for (Row portRow : portRows.values()) {
                         Port port = ovsdbConfigurationService.getTypedRow(node, Port.class, portRow);
                         for (UUID interfaceUuid : port.getInterfacesColumn().getData()) {
-                            Interface interfaceRow = (Interface) ovsdbConfigurationService
+                            Row ifaceRow = ovsdbConfigurationService
                                     .getRow(node,
                                             ovsdbConfigurationService.getTableName(node, Interface.class),
                                             interfaceUuid.toString());
-
-                            Map<String, String> externalIds = interfaceRow.getExternalIdsColumn().getData();
+                            Interface iface = ovsdbConfigurationService.getTypedRow(node, Interface.class, ifaceRow);
+                            Map<String, String> externalIds = iface.getExternalIdsColumn().getData();
 
                             if (externalIds == null) {
-                                logger.trace("No external_ids seen in {}", interfaceRow);
+                                logger.trace("No external_ids seen in {}", iface.getName());
                                 continue;
                             }
 
@@ -173,7 +183,7 @@ public class PortHandler extends AbstractHandler
                             }
 
                             if (neutronPortId.equalsIgnoreCase(neutronPort.getPortUUID())) {
-                                logger.trace("neutronPortDeleted: Delete interface {}", interfaceRow.getName());
+                                logger.trace("neutronPortDeleted: Delete interface {}", iface.getName());
                                 ovsdbConfigurationService.deleteRow(node,
                                                              ovsdbConfigurationService.getTableName(node, Port.class),
                                                              port.getUuid().toString());
@@ -183,7 +193,7 @@ public class PortHandler extends AbstractHandler
                     }
                 }
             } catch (Exception e) {
-                logger.error("Exception during handlingNeutron network delete");
+                logger.error("Exception during handlingNeutron port delete", e);
             }
         }
         logger.debug(" PORT delete successful for tenant-id - {}, " +
@@ -213,6 +223,9 @@ public class PortHandler extends AbstractHandler
             case DELETE:
                 doNeutronPortDeleted(ev.getPort());
                 break;
+            case UPDATE:
+                doNeutronPortUpdated(ev.getPort());
+                break;
             default:
                 logger.warn("Unable to process event action " + ev.getAction());
                 break;