Remove sal IInventoryListener from Southboundhandler 22/16222/1
authorSam Hague <shague@redhat.com>
Tue, 10 Mar 2015 02:14:22 +0000 (22:14 -0400)
committerSam Hague <shague@redhat.com>
Tue, 10 Mar 2015 02:16:08 +0000 (22:16 -0400)
Change-Id: Ia9bf01f5ff13e6bfa164b3e9477cc62927cbe478
Signed-off-by: Sam Hague <shague@redhat.com>
integrationtest/src/test/java/org/opendaylight/ovsdb/integrationtest/neutron/NeutronIT.java
integrationtest/src/test/resources/controller.xml [new file with mode: 0644]
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/FlowCapableNodeDataChangeListener.java
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/NodeUtils.java [moved from openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NodeUtils.java with 86% similarity]
openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/OF13Provider.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/Activator.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/SouthboundHandler.java
openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/api/NetworkingProvider.java

index 147f1f7f789cf1b7cca794848ba334b23c9d7ca2..33089f58da225c6664235c588298c399db192508 100644 (file)
@@ -328,7 +328,7 @@ public class NeutronIT extends OvsdbIntegrationTestBase {
         }
 
         @Override
-        public void initializeOFFlowRules(org.opendaylight.controller.sal.core.Node openflowNode) {
+        public void initializeOFFlowRules(Node openflowNode) {
 
         }
     }
diff --git a/integrationtest/src/test/resources/controller.xml b/integrationtest/src/test/resources/controller.xml
new file mode 100644 (file)
index 0000000..e69de29
index f5d89fecb22620cf6dba49448dd46a0498c6ada5..ae9f06bf0e9810437f11793dcc88421b7f8005ec 100644 (file)
@@ -9,12 +9,17 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13;
 
+import com.google.common.collect.Lists;
+import java.util.List;
 import java.util.Map;
+import java.util.Set;
 import org.opendaylight.controller.md.sal.binding.api.DataBroker;
 import org.opendaylight.controller.md.sal.binding.api.DataChangeListener;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataBroker;
 import org.opendaylight.controller.md.sal.common.api.data.AsyncDataChangeEvent;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+//import org.opendaylight.ovsdb.openstack.netvirt.NodeUtils;
+import org.opendaylight.ovsdb.openstack.netvirt.api.NetworkingProviderManager;
 import org.opendaylight.ovsdb.utils.servicehelper.ServiceHelper;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.inventory.rev130819.FlowCapableNode;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
@@ -29,6 +34,7 @@ import org.slf4j.LoggerFactory;
 public class FlowCapableNodeDataChangeListener implements DataChangeListener, AutoCloseable {
     private static final Logger LOG = LoggerFactory.getLogger(FlowCapableNodeDataChangeListener.class);
     private ListenerRegistration<DataChangeListener> registration;
+    private List<Node> nodeCache = Lists.newArrayList();
 
     public static final InstanceIdentifier<FlowCapableNode> createFlowCapableNodePath () {
         return InstanceIdentifier.builder(Nodes.class)
@@ -54,15 +60,46 @@ public class FlowCapableNodeDataChangeListener implements DataChangeListener, Au
 
         LOG.debug("onDataChanged: {}", changes);
         for( Map.Entry<InstanceIdentifier<?>, DataObject> created : changes.getCreatedData().entrySet()) {
-            InstanceIdentifier<?> iiD = created.getKey();
+            InstanceIdentifier<?> iID = created.getKey();
+            String openflowId = iID.firstKeyOf(Node.class, NodeKey.class).getId().getValue();
             LOG.debug(">>>>> created iiD: {} - first: {} - NodeKey: {}",
-                    iiD,
-                    iiD.firstIdentifierOf(Node.class),
-                    iiD.firstKeyOf(Node.class, NodeKey.class).getId().getValue());
+                    iID,
+                    iID.firstIdentifierOf(Node.class),
+                    openflowId);
 
             PipelineOrchestrator pipelineOrchestrator =
                     (PipelineOrchestrator) ServiceHelper.getGlobalInstance(PipelineOrchestrator.class, this);
-            pipelineOrchestrator.enqueue(iiD.firstKeyOf(Node.class, NodeKey.class).getId().getValue());
+            pipelineOrchestrator.enqueue(openflowId);
+
+            notifyNodeUpdated(NodeUtils.getOpenFlowNode(openflowId));
+        }
+
+        //TODO: how to get the removed node id
+        Map<InstanceIdentifier<?>, DataObject> originalDataObject = changes.getOriginalData();
+        Set<InstanceIdentifier<?>> iID = changes.getRemovedPaths();
+        for (InstanceIdentifier instanceIdentifier : iID) {
+            notifyNodeUpdated(NodeUtils.getOpenFlowNode(null));
+        }
+    }
+
+    public void notifyNodeUpdated (Node openFlowNode) {
+        LOG.debug("notifyNodeUpdated: Node {} update from Controller's inventory Service",
+                openFlowNode.getId().getValue());
+
+        // Add the Node Type check back once the Consistency issue is resolved between MD-SAL and AD-SAL
+        if (!nodeCache.contains(openFlowNode)) {
+            nodeCache.add(openFlowNode);
+            NetworkingProviderManager networkingProviderManager =
+                    (NetworkingProviderManager) ServiceHelper.getGlobalInstance(NetworkingProviderManager.class,
+                            this);
+            networkingProviderManager.getProvider(openFlowNode).initializeOFFlowRules(openFlowNode);
         }
     }
+
+    public void notifyNodeRemoved (Node openFlowNode) {
+        LOG.debug("notifyNodeRemoved: Node {} update from Controller's inventory Service",
+                openFlowNode.getId().getValue());
+
+        nodeCache.remove(null);//openFlowNode);
+    }
 }
similarity index 86%
rename from openstack/net-virt/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/NodeUtils.java
rename to openstack/net-virt-providers/src/main/java/org/opendaylight/ovsdb/openstack/netvirt/providers/openflow13/NodeUtils.java
index 51117f2716fa2c32ae3ad784f489071b21fe1cee..e0f7ba12d3aa15ae2c76f6b61a7a95871fd5174e 100644 (file)
@@ -7,7 +7,7 @@
  *
  * Authors : Sam Hague
  */
-package org.opendaylight.ovsdb.openstack.netvirt;
+package org.opendaylight.ovsdb.openstack.netvirt.providers.openflow13;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -32,6 +32,17 @@ public class NodeUtils {
         return id;
     }
 
+    public static Node getOpenFlowNode (String identifier) {
+        NodeId nodeId = new NodeId(identifier);
+        NodeKey nodeKey = new NodeKey(nodeId);
+        Node node = new NodeBuilder()
+                .setId(nodeId)
+                .setKey(nodeKey)
+                .build();
+
+        return node;
+    }
+
     public static Node getMdsalNode (org.opendaylight.controller.sal.core.Node salNode) {
         String identifier = salNode.getNodeIDString();
 
index a01217125ff7f3346dd3c873fc783fa09d42ed26..5d0f0f667425b0e9d33ac1a1305554cd3763fc54 100644 (file)
@@ -2111,15 +2111,16 @@ public class OF13Provider implements NetworkingProvider {
     }
 
     @Override
-    public void initializeOFFlowRules(org.opendaylight.controller.sal.core.Node openflowNode) {
+    public void initializeOFFlowRules(Node openflowNode) {
         Preconditions.checkNotNull(connectionService);
         List<Node> ovsNodes = connectionService.getNodes();
         if (ovsNodes == null) return;
         for (Node ovsNode : ovsNodes) {
             Long brIntDpid = this.getIntegrationBridgeOFDPID(ovsNode);
             Long brExDpid = this.getExternalBridgeDpid(ovsNode);
-            logger.debug("Compare openflowNode to OVS node {} vs {} and {}", openflowNode.getID(), brIntDpid, brExDpid);
-            String openflowID = openflowNode.getID().toString();
+            logger.debug("Compare openflowNode to OVS node {} vs {} and {}",
+                    openflowNode.getId().getValue(), brIntDpid, brExDpid);
+            String openflowID = openflowNode.getId().getValue();
             if (openflowID.contains(brExDpid.toString())) {
                 this.initializeFlowRules(ovsNode, configurationService.getExternalBridgeName());
                 this.triggerInterfaceUpdates(ovsNode);
index ed3e1f3bcb2500692e8305e4edf8f487c165e58d..d8b97e76a12788354ea8b985739c7b134fdaf72e 100644 (file)
@@ -167,7 +167,7 @@ public class Activator extends DependencyActivatorBase {
         southboundHandlerProperties.put(Constants.EVENT_HANDLER_TYPE_PROPERTY, AbstractEvent.HandlerType.SOUTHBOUND);
 
         manager.add(createComponent()
-                .setInterface(new String[]{OvsdbInventoryListener.class.getName(), IInventoryListener.class.getName(),
+                .setInterface(new String[]{OvsdbInventoryListener.class.getName(),
                                 AbstractHandler.class.getName()},
                         southboundHandlerProperties)
                 .setImplementation(SouthboundHandler.class)
index 9e1a7653f158e4a0d0d1fc1d1d5fb7b80861913a..46d2f4474b2bfd579e44c80aa7bedb8da9c3a7d3 100644 (file)
@@ -9,10 +9,6 @@
  */
 package org.opendaylight.ovsdb.openstack.netvirt;
 
-import org.opendaylight.controller.sal.core.NodeConnector;
-import org.opendaylight.controller.sal.core.Property;
-import org.opendaylight.controller.sal.core.UpdateType;
-import org.opendaylight.controller.switchmanager.IInventoryListener;
 import org.opendaylight.neutron.spi.NeutronNetwork;
 import org.opendaylight.ovsdb.lib.notation.Row;
 import org.opendaylight.ovsdb.lib.notation.UUID;
@@ -30,7 +26,6 @@ import org.opendaylight.ovsdb.schema.openvswitch.OpenVSwitch;
 import org.opendaylight.ovsdb.schema.openvswitch.Port;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
 
-import com.google.common.collect.Lists;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -40,11 +35,9 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.ConcurrentMap;
 
-public class SouthboundHandler extends AbstractHandler implements OvsdbInventoryListener,
-                                                                  IInventoryListener {
+public class SouthboundHandler extends AbstractHandler implements OvsdbInventoryListener {
     static final Logger logger = LoggerFactory.getLogger(SouthboundHandler.class);
     //private Thread eventThread;
-    List<org.opendaylight.controller.sal.core.Node> nodeCache;
 
     // The implementation for each of these services is resolved by the OSGi Service Manager
     private volatile ConfigurationService configurationService;
@@ -56,7 +49,6 @@ public class SouthboundHandler extends AbstractHandler implements OvsdbInventory
     private volatile NeutronL3Adapter neutronL3Adapter;
 
     void init() {
-        nodeCache = Lists.newArrayList();
     }
 
     void start() {
@@ -295,26 +287,6 @@ public class SouthboundHandler extends AbstractHandler implements OvsdbInventory
         return null;
     }
 
-    @Override
-    public void notifyNode(org.opendaylight.controller.sal.core.Node openFlowNode,
-                           UpdateType type, Map<String, Property> propMap) {
-        logger.debug("notifyNode: Node {} update {} from Controller's inventory Service", openFlowNode, type);
-
-        // Add the Node Type check back once the Consistency issue is resolved between MD-SAL and AD-SAL
-        if (!type.equals(UpdateType.REMOVED) && !nodeCache.contains(openFlowNode)) {
-            nodeCache.add(openFlowNode);
-            networkingProviderManager.getProvider(NodeUtils.getMdsalNode(openFlowNode))
-                    .initializeOFFlowRules(openFlowNode);
-        } else if (type.equals(UpdateType.REMOVED)){
-            nodeCache.remove(openFlowNode);
-        }
-    }
-
-    @Override
-    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 = connectionService.getNodes();
         if (nodes == null) return;
index bec4ec12faf2c44ad07f017261347da512d79a37..403597fbe826e1ddb02fcbc4645fcf0589594c49 100644 (file)
@@ -61,6 +61,6 @@ public interface NetworkingProvider {
     /**
      * Initialize the Flow rules for a given OpenFlow node
      */
-    public void initializeOFFlowRules(org.opendaylight.controller.sal.core.Node openflowNode);
+    public void initializeOFFlowRules(Node openflowNode);
 
 }