Merge "DeviceManager holds deviceContexts registry"
authormichal rehak <mirehak@cisco.com>
Fri, 17 Apr 2015 04:33:20 +0000 (04:33 +0000)
committerGerrit Code Review <gerrit@opendaylight.org>
Fri, 17 Apr 2015 04:33:20 +0000 (04:33 +0000)
applications/statistics-manager/src/main/java/org/opendaylight/openflowplugin/applications/statistics/manager/impl/helper/FlowComparator.java
applications/statistics-manager/src/main/java/org/opendaylight/openflowplugin/applications/statistics/manager/impl/helper/FlowComparatorFactory.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/rpc/RpcContextImpl.java

index ebd89c9b9c87f462d81d4dfbe19f036e98e1623e..489d2f9657d29078d3a23b8b4e27a864d22bb4a1 100644 (file)
@@ -24,6 +24,7 @@ public final class FlowComparator {
         FLOW_COMPARATORS.add(FlowComparatorFactory.createPriority());
         FLOW_COMPARATORS.add(FlowComparatorFactory.createTableId());
         FLOW_COMPARATORS.add(FlowComparatorFactory.createContainerName());
+        FLOW_COMPARATORS.add(FlowComparatorFactory.createCookie());
         FLOW_COMPARATORS.add(FlowComparatorFactory.createMatch());
     }
 
index fda7001cd81e8e490986728d420fe6655dd80527..20c65346651e1a96960eee43edac65bb27691bba 100644 (file)
@@ -91,6 +91,25 @@ public final class FlowComparatorFactory {
         };
     }
 
+    public static SimpleComparator<Flow> createCookie() {
+        return new SimpleComparator<Flow>() {
+            /**
+             * Compares flows by cookie value
+             */
+            @Override
+            public boolean areObjectsEqual(final Flow statsFlow, final Flow storedFlow) {
+                if (statsFlow.getCookie() == null) {
+                    if (storedFlow.getCookie() != null) {
+                        return false;
+                    }
+                } else if (!statsFlow.getCookie().equals(storedFlow.getCookie())) {
+                    return false;
+                }
+                return true;
+            }
+        };
+    }
+
     public static SimpleComparator<Flow> createMatch() {
         return new SimpleComparator<Flow>() {
             /**
index eedcf3ab57e20662b51d7308b6884689ad8138d0..dbbffd4bd51193e38881fa1b08a758260f9595de 100644 (file)
@@ -7,6 +7,8 @@
  */
 package org.opendaylight.openflowplugin.impl.rpc;
 
+import org.slf4j.Logger;
+
 import com.google.common.util.concurrent.SettableFuture;
 import java.util.ArrayList;
 import java.util.Collections;
@@ -17,7 +19,6 @@ import org.opendaylight.openflowplugin.api.openflow.device.DeviceContext;
 import org.opendaylight.openflowplugin.api.openflow.device.RequestContext;
 import org.opendaylight.openflowplugin.api.openflow.rpc.RpcContext;
 import org.opendaylight.yang.gen.v1.urn.opendaylight.inventory.rev130819.NodeContext;
-import org.opendaylight.yangtools.yang.binding.DataObject;
 import org.opendaylight.yangtools.yang.binding.RpcService;
 import org.opendaylight.yangtools.yang.common.RpcError;
 import org.opendaylight.yangtools.yang.common.RpcResult;
@@ -25,10 +26,10 @@ import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
 
 public class RpcContextImpl implements RpcContext {
 
+    private static final Logger LOG = org.slf4j.LoggerFactory.getLogger(RpcContextImpl.class);
     final ProviderContext providerContext;
 
     // TODO: add private Sal salBroker
-    private final List<RequestContext<? extends DataObject>> requestContexts = new ArrayList<>();
     private final DeviceContext deviceContext;
     private final List<RoutedRpcRegistration> rpcRegistrations = new ArrayList<>();
     private final List<RequestContext<?>> synchronizedRequestsList = Collections
@@ -90,7 +91,9 @@ public class RpcContextImpl implements RpcContext {
 
     @Override
     public <T> void forgetRequestContext(final RequestContext<T> requestContext) {
-        requestContexts.remove(requestContext);
+        synchronizedRequestsList.remove(requestContext);
+        LOG.trace("Removed request context with xid {}. Context request in list {}.",
+                requestContext.getXid(), synchronizedRequestsList.size());
     }
 
     @Override
@@ -104,7 +107,7 @@ public class RpcContextImpl implements RpcContext {
     }
 
     public boolean isRequestContextCapacityEmpty() {
-        return requestContexts.size() <= maxRequestsPerDevice;
+        return synchronizedRequestsList.size() <= maxRequestsPerDevice;
     }
 
 }