Merge "Minor changes in md-sal tests."
authorEd Warnicke <eaw@cisco.com>
Thu, 9 Jan 2014 20:22:34 +0000 (20:22 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Thu, 9 Jan 2014 20:22:34 +0000 (20:22 +0000)
opendaylight/distribution/opendaylight/src/main/resources/run.sh
opendaylight/forwardingrulesmanager/implementation/src/main/java/org/opendaylight/controller/forwardingrulesmanager/internal/ForwardingRulesManager.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsProvider.java
opendaylight/md-sal/statistics-manager/src/main/java/org/opendaylight/controller/md/statistics/manager/StatisticsUpdateCommiter.java
opendaylight/sal/api/src/main/java/org/opendaylight/controller/sal/core/ComponentActivatorAbstractBase.java
opendaylight/samples/simpleforwarding/src/main/java/org/opendaylight/controller/samples/simpleforwarding/internal/SimpleForwardingImpl.java

index 3a29f63b81a5ab0d442fae2b6e0c75003d6c2e68..ffe53afd4d5393de8e065a1708caf41893e3e726 100755 (executable)
@@ -164,6 +164,8 @@ FWCLASSPATH=${FWCLASSPATH},file:${basedir}/lib/org.eclipse.virgo.kernel.equinox.
 CLASSPATH=${CLASSPATH}:${basedir}/lib/org.eclipse.equinox.launcher-1.3.0.v20120522-1813.jar
 FWCLASSPATH=${FWCLASSPATH},file:${basedir}/lib/org.eclipse.equinox.launcher-1.3.0.v20120522-1813.jar
 
+cd $basedir
+
 if [ "${stopdaemon}" -eq 1 ]; then
     if [ -e "${pidfile}" ]; then
         daemonpid=`cat "${pidfile}"`
index 3d6a0292ef67225079b11759a3560bdfddf85377..2b3347f312469b00ca6748f5d19884626ce1daf3 100644 (file)
@@ -2639,6 +2639,13 @@ public class ForwardingRulesManager implements
         }
     }
 
+    /**
+     * Function called by the dependency manager before Container is Stopped and Destroyed.
+     */
+    public void containerStop() {
+        uninstallAllFlowEntries(false);
+    }
+
     /**
      * Function called by the dependency manager before the services exported by
      * the component are unregistered, this will be followed by a "destroy ()"
@@ -2646,7 +2653,6 @@ public class ForwardingRulesManager implements
      */
     void stop() {
         stopping = true;
-        uninstallAllFlowEntries(false);
         // Shutdown executor
         this.executor.shutdownNow();
         // Now walk all the workMonitor and wake up the one sleeping because
index 19cf0ed386bda52aed1ab8b572dd1c5cea821d53..45bc9055026812bf00b1f1bf9e3da9c0b97ffb90 100644 (file)
@@ -260,22 +260,9 @@ public class StatisticsProvider implements AutoCloseable {
                 this.multipartMessageManager.addTxIdToRequestTypeEntry(response.get().getResult().getTransactionId()
                         , StatsRequestType.AGGR_FLOW);
             }
+        }else{
+            spLogger.debug("No details found in data store for flow tables associated with Node {}",targetNodeKey);
         }
-        
-        //Note: Just for testing, because i am not able to fetch table list from datastore
-        // Bug-225 is raised for investigation.
-        
-//                spLogger.info("Send aggregate stats request for flow table {} to node {}",1,targetNodeKey);
-//                GetAggregateFlowStatisticsFromFlowTableForAllFlowsInputBuilder input = 
-//                        new GetAggregateFlowStatisticsFromFlowTableForAllFlowsInputBuilder();
-//                
-//                input.setNode(new NodeRef(InstanceIdentifier.builder(Nodes.class).child(Node.class, targetNodeKey).toInstance()));
-//                input.setTableId(new TableId((short)1));
-//                Future<RpcResult<GetAggregateFlowStatisticsFromFlowTableForAllFlowsOutput>> response = 
-//                        flowStatsService.getAggregateFlowStatisticsFromFlowTableForAllFlows(input.build());`
-//                
-//                multipartMessageManager.setTxIdAndTableIdMapEntry(response.get().getResult().getTransactionId(), (short)1);
-        
     }
 
     private void sendAllNodeConnectorsStatisticsRequest(NodeRef targetNode) throws InterruptedException, ExecutionException{
@@ -376,7 +363,7 @@ public class StatisticsProvider implements AutoCloseable {
     private List<Short> getTablesFromNode(NodeKey nodeKey){
         InstanceIdentifier<FlowCapableNode> nodesIdentifier = InstanceIdentifier.builder(Nodes.class).child(Node.class,nodeKey).augmentation(FlowCapableNode.class).toInstance();
         
-        FlowCapableNode node = (FlowCapableNode)dps.readConfigurationData(nodesIdentifier);
+        FlowCapableNode node = (FlowCapableNode)dps.readOperationalData(nodesIdentifier);
         List<Short> tablesId = new ArrayList<Short>();
         if(node != null && node.getTable()!=null){
             spLogger.info("Number of tables {} supported by node {}",node.getTable().size(),nodeKey);
index aa6e99a03f978a4604fe72ea4ba36307a6bdaa80..e7f6129aa5018c44baa9be2110597fab05c519a3 100644 (file)
@@ -799,7 +799,11 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList
      * _ethernetSource=EthernetSource [_address=MacAddress [_value=00:00:00:00:00:00], _mask=null, augmentation=[]], 
      * _ethernetType=EthernetType [_type=EtherType [_value=2048], _mask=null, augmentation=[]]
      * 
-     * So this custom equals method add additional check, in case any match element is null in data-store-flow, but not
+     * Similarly for inPort, if user/application don't set any value for it, FRM will store null value for it in data store. 
+     * When we fetch the same flow (with its statistics) from switch, plugin converts its value to openflow:X:0.
+     *  e.g _inPort=Uri [_value=openflow:1:0]  
+     * 
+     * So this custom equals method add additional check to take care of these scenario, in case any match element is null in data-store-flow, but not
      * in the flow fetched from switch.
      * 
      * @param statsFlow
@@ -820,8 +824,7 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList
                     return false;
                 }
             }
-        } //else if(!storedFlow.getEthernetMatch().equals(statsFlow.getEthernetMatch())) {
-        else if(!EthernetMatchEquals(statsFlow.getEthernetMatch(),storedFlow.getEthernetMatch())) {
+        } else if(!EthernetMatchEquals(statsFlow.getEthernetMatch(),storedFlow.getEthernetMatch())) {
             return false;
         }
         if (storedFlow.getIcmpv4Match()== null) {
@@ -847,7 +850,12 @@ public class StatisticsUpdateCommiter implements OpendaylightGroupStatisticsList
         }
         if (storedFlow.getInPort()== null) {
             if (statsFlow.getInPort() != null) {
-                return false;
+                String[] portArr = statsFlow.getInPort().getValue().split(":");
+                if(portArr.length >= 3){
+                    if(Integer.parseInt(portArr[2]) != 0){
+                        return false;
+                    }
+                }
             }
         } else if(!storedFlow.getInPort().equals(statsFlow.getInPort())) {
             return false;
index 969aa630a1519f712e24af8ef0e0cd0025022635..0cd1612808b4a67e8c0eb38c0dec013e4090dee3 100644 (file)
@@ -45,8 +45,8 @@ abstract public class ComponentActivatorAbstractBase implements
     Logger logger = LoggerFactory
             .getLogger(ComponentActivatorAbstractBase.class);
     private DependencyManager dm;
-    private ConcurrentMap<ImmutablePair<String, Object>, Component> dbInstances = (ConcurrentMap<ImmutablePair<String, Object>, Component>) new ConcurrentHashMap<ImmutablePair<String, Object>, Component>();
-    private ConcurrentMap<Object, Component> dbGlobalInstances = (ConcurrentMap<Object, Component>) new ConcurrentHashMap<Object, Component>();
+    private ConcurrentMap<ImmutablePair<String, Object>, Component> dbInstances = new ConcurrentHashMap<ImmutablePair<String, Object>, Component>();
+    private ConcurrentMap<Object, Component> dbGlobalInstances = new ConcurrentHashMap<Object, Component>();
 
     /**
      * Method that should be overriden by the derived class for customization
@@ -253,6 +253,11 @@ abstract public class ComponentActivatorAbstractBase implements
                             containerName, imps[i]);
                     Component c = this.dbInstances.get(key);
                     if (c != null) {
+                        if (c.getService() != null) {
+                            c.invokeCallbackMethod(new Object[] { c.getService() }, "containerStop",
+                                                   new Class[][] {{ Component.class}, {} },
+                                                   new Object[][] { {c}, {} });
+                        }
                         // Now remove the component from dependency manager,
                         // which will implicitely stop it first
                         this.dm.remove(c);
index a34cbb5db80f8f7232bf8dac7c2c41e7aba42c01..7a3625a229ef5ae04f76de4a6eabe28feef657b7 100644 (file)
@@ -800,8 +800,7 @@ public class SimpleForwardingImpl implements IfNewHostNotify,
         log.debug("Host Facing Port in a container came up, install the rules for all hosts from this port !");
         Set<HostNodeConnector> allHosts = this.hostTracker.getAllHosts();
         for (HostNodeConnector host : allHosts) {
-            if (node.equals(host.getnodeconnectorNode())
-                    && swPort.equals(host.getnodeConnector())) {
+            if (node.equals(host.getnodeconnectorNode())) {
                 /*
                  * This host resides behind the same switch and port for which a port up
                  * message is received. Ideally this should not happen, but if it does,