External api proposal
[openflowplugin.git] / applications / statistics-manager / src / main / java / org / opendaylight / openflowplugin / applications / statistics / manager / impl / StatListenCommitFlow.java
index 6994d3045450e7eec9386213f0ccac50c8c57320..db2b41002334c9eebbde3400df7c5a6246622b24 100644 (file)
@@ -23,8 +23,8 @@ import org.opendaylight.controller.md.sal.binding.api.ReadWriteTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
-import org.opendaylight.openflowplugin.applications.statistics.manager.StatisticsManager;
 import org.opendaylight.openflowplugin.applications.statistics.manager.StatRpcMsgManager.TransactionCacheContainer;
+import org.opendaylight.openflowplugin.applications.statistics.manager.StatisticsManager;
 import org.opendaylight.openflowplugin.applications.statistics.manager.StatisticsManager.StatDataStoreOperation;
 import org.opendaylight.openflowplugin.applications.statistics.manager.StatisticsManager.StatDataStoreOperation.StatsManagerOperationType;
 import org.opendaylight.openflowplugin.applications.statistics.manager.impl.helper.FlowComparator;
@@ -52,8 +52,8 @@ import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.a
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapList;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.and.statistics.map.list.FlowAndStatisticsMapListBuilder;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.statistics.rev130819.flow.statistics.FlowStatisticsBuilder;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionAware;
-import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev131103.TransactionId;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionAware;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.flow.transaction.rev150304.TransactionId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeId;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.Nodes;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.nodes.Node;
@@ -330,7 +330,8 @@ public class StatListenCommitFlow extends StatAbstractListenCommit<Flow, Openday
                         try {
                             flowIdByHash.put(flowHashId.getKey(), flowHashId.getFlowId());
                         } catch (final Exception e) {
-                            LOG.warn("flow hashing hit a duplicate for {} -> {}", flowHashId.getKey(), flowHashId.getFlowId());
+                            LOG.warn("flow hashing hit a duplicate for {} -> {}. Exception was raised: {}",
+                                    flowHashId.getKey(), flowHashId.getFlowId(), e.getMessage());
                         }
                     }
                 }
@@ -348,22 +349,23 @@ public class StatListenCommitFlow extends StatAbstractListenCommit<Flow, Openday
         }
 
         private FlowKey searchInConfiguration(final FlowAndStatisticsMapList flowStat, final ReadWriteTransaction trans) {
-            initConfigFlows(trans);
+            initConfigFlows();
             final Iterator<Flow> it = configFlows.iterator();
             while(it.hasNext()) {
                 final Flow cfgFlow = it.next();
                 final FlowKey cfgKey = cfgFlow.getKey();
-                if(flowIdByHash.inverse().containsKey(cfgKey)) {
-                    it.remove();
-                } else if(FlowComparator.flowEquals(flowStat, cfgFlow)) {
-                    it.remove();
-                    return cfgKey;
+                final FlowId cfgFlowId = cfgKey.getId();
+
+                if(! flowIdByHash.inverse().containsKey(cfgFlowId)) {
+                    if(FlowComparator.flowEquals(flowStat, cfgFlow)) {
+                        return cfgKey;
+                    }
                 }
             }
             return null;
         }
 
-        private void initConfigFlows(final ReadWriteTransaction trans) {
+        private void initConfigFlows() {
             final Optional<Table> table = readLatestConfiguration(tableRef);
             List<Flow> localList = null;
             if(table.isPresent()) {
@@ -447,7 +449,8 @@ public class StatListenCommitFlow extends StatAbstractListenCommit<Flow, Openday
                     }
                 } else {
                     if (listMissingConfigFlows.remove(flowRef)) {
-                        break; // we probably lost some multipart msg
+                        // it is probable that some multipart message was lost
+                        break;
                     }
                 }
                 final InstanceIdentifier<FlowHashIdMap> flHashIdent =