added requestMap access methods 07/18807/3
authorTimotej Kubas <tkubas@cisco.com>
Wed, 22 Apr 2015 09:30:10 +0000 (11:30 +0200)
committerTimotej Kubas <tkubas@cisco.com>
Wed, 22 Apr 2015 10:38:53 +0000 (12:38 +0200)
Change-Id: If5d3864dfa2751e936fd7da51db88f7e63172b53
Signed-off-by: Timotej Kubas <tkubas@cisco.com>
openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/BarrierTaskBuilder.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OFJResult2RequestCtxFuture.java
openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java
openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java

index 68b4e17e38eb30cacaa1c2dd1f7030dcdc8eeb81..86315b1af1635ad6f7ddbd775612749c02111ee8 100644 (file)
@@ -10,7 +10,6 @@ package org.opendaylight.openflowplugin.api.openflow.device;
 
 import io.netty.util.Timeout;
 import java.math.BigInteger;
-import java.util.Map;
 import org.opendaylight.controller.md.sal.binding.api.ReadTransaction;
 import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
 import org.opendaylight.controller.sal.binding.api.NotificationProviderService;
@@ -118,9 +117,15 @@ public interface DeviceContext extends AutoCloseable, OpenflowPluginTimer, Messa
     Xid getNextXid();
 
     /**
-     * @return readonly map of outstanding requests
+     * @param xid key
+     * @return request by xid
      */
-    Map<Long, RequestContext> getRequests();
+    RequestContext lookupRequest(Xid xid);
+
+    /**
+     * @return number of outstanding requests in map
+     */
+    int getNumberOfOutstandingRequests();
 
     /**
      * Method writes request context into request context map. This method
@@ -131,6 +136,13 @@ public interface DeviceContext extends AutoCloseable, OpenflowPluginTimer, Messa
      */
     void hookRequestCtx(Xid xid, RequestContext requestFutureContext);
 
+    /**
+     * Method removes request context from request context map.
+     *
+     * @param xid
+     */
+    RequestContext unhookRequestCtx(Xid xid);
+
     /**
      * Method that attaches anyMessageTypeListener to connection adapters as message listener.
      *
index b1929d849e9f1dddb4dbf1b69668f521388a0e47..a2f83b974346cb361b55a3230392c581cb09b061 100644 (file)
@@ -56,7 +56,7 @@ public class BarrierTaskBuilder {
             @Override
             public void run(final Timeout timeout) throws Exception {
                 // check outstanding requests first
-                if (! deviceCtx.getRequests().isEmpty()) {
+                if (deviceCtx.getNumberOfOutstandingRequests() > 0) {
                     BarrierInput barrierInput = makeBarrier();
                     LOG.trace("sending out barrier [{}]", barrierInput.getXid());
                     final Future<RpcResult<BarrierOutput>> future = deviceCtx.getPrimaryConnectionContext()
index 356d95ee3e1e38cda674a48343295c5b76fe1814..b49773ac3f4a8b62ce1ff9e5e8582183ba723c33 100644 (file)
@@ -188,16 +188,25 @@ public class DeviceContextImpl implements DeviceContext {
     }
 
     @Override
-    public Map<Long, RequestContext> getRequests() {
-        return requests;
+    public RequestContext lookupRequest(Xid xid) {
+        return requests.get(xid.getValue());
+    }
+
+    @Override
+    public int getNumberOfOutstandingRequests() {
+        return requests.size();
     }
 
     @Override
     public void hookRequestCtx(final Xid xid, final RequestContext requestFutureContext) {
-        // TODO Auto-generated method stub
         requests.put(xid.getValue(), requestFutureContext);
     }
 
+    @Override
+    public RequestContext unhookRequestCtx(Xid xid) {
+        return requests.remove(xid.getValue());
+    }
+
     @Override
     public void attachOpenflowMessageListener(final OpenflowMessageListenerFacade openflowMessageListenerFacade) {
         this.openflowMessageListenerFacade = openflowMessageListenerFacade;
@@ -226,10 +235,10 @@ public class DeviceContextImpl implements DeviceContext {
 
     @Override
     public void processReply(final OfHeader ofHeader) {
-        final RequestContext requestContext = getRequests().get(ofHeader.getXid());
+        final RequestContext requestContext = requests.get(ofHeader.getXid());
         if (null != requestContext) {
             final SettableFuture replyFuture = requestContext.getFuture();
-            getRequests().remove(ofHeader.getXid());
+            requests.remove(ofHeader.getXid());
             RpcResult<OfHeader> rpcResult;
             if (ofHeader instanceof Error) {
                 final Error error = (Error) ofHeader;
@@ -261,10 +270,10 @@ public class DeviceContextImpl implements DeviceContext {
 
     @Override
     public void processReply(final Xid xid, final List<MultipartReply> ofHeaderList) {
-        final RequestContext requestContext = getRequests().get(xid.getValue());
+        final RequestContext requestContext = requests.get(xid.getValue());
         if (null != requestContext) {
             final SettableFuture replyFuture = requestContext.getFuture();
-            getRequests().remove(xid.getValue());
+            requests.remove(xid.getValue());
             final RpcResult<List<MultipartReply>> rpcResult = RpcResultBuilder
                     .<List<MultipartReply>>success()
                     .withResult(ofHeaderList)
@@ -290,11 +299,11 @@ public class DeviceContextImpl implements DeviceContext {
 
         LOG.trace("Processing exception for xid : {}", xid.getValue());
 
-        final RequestContext requestContext = getRequests().get(xid.getValue());
+        final RequestContext requestContext = requests.get(xid.getValue());
 
         if (null != requestContext) {
             final SettableFuture replyFuture = requestContext.getFuture();
-            getRequests().remove(xid.getValue());
+            requests.remove(xid.getValue());
             final RpcResult<List<OfHeader>> rpcResult = RpcResultBuilder
                     .<List<OfHeader>>failed()
                     .withError(RpcError.ErrorType.APPLICATION, String.format("Message processing failed : %s", deviceDataException.getError()), deviceDataException)
index ea3dbd380bad0cac844ee237b6897f4562c696de..cc2d15a67f233f44adc4167e9977d80415eb0f6d 100644 (file)
@@ -42,7 +42,7 @@ public class OFJResult2RequestCtxFuture<T> {
                     deviceContext.getMessageSpy().spyMessage(requestContext, MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE);
 
                     // remove current request from request cache in deviceContext
-                    deviceContext.getRequests().remove(requestContext.getXid().getValue());
+                    deviceContext.unhookRequestCtx(requestContext.getXid());
                     // handle requestContext failure
                     StringBuilder rpcErrors = new StringBuilder();
                     if (null != fRpcResult.getErrors() && fRpcResult.getErrors().size() > 0) {
index 8eb53f2148303fe8e36b92ae9369779a9459e9f1..916b546a4e4319a9209a41cf7b9cc1043acf73fd 100644 (file)
@@ -293,7 +293,7 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService
                 if (!voidRpcResult.isSuccessful()) {
                     // remove current request from request cache in deviceContext
                     messageSpy.spyMessage(flowModInput, MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE);
-                    deviceContext.getRequests().remove(requestContext.getXid().getValue());
+                    deviceContext.unhookRequestCtx(requestContext.getXid());
                     // handle requestContext failure
                     StringBuilder rpcErrors = new StringBuilder();
                     if (null != voidRpcResult.getErrors() && voidRpcResult.getErrors().size() > 0) {
index 1fa1a92a99d75a6af001784f2fca0ebbe8b6e338..5c4e508ffcdb8ddb2160373e4dc12e0b6263c328 100644 (file)
@@ -146,7 +146,7 @@ public class DeviceContextImplTest {
         final GetAsyncOutput asyncOutput = createAsyncOutput(xid);
         LOG.info("Hooking RequestContext");
         deviceContext.hookRequestCtx(xid, requestContext);
-        Assert.assertEquals(requestContext, deviceContext.getRequests().get(xid.getValue()));
+        Assert.assertEquals(requestContext, deviceContext.lookupRequest(xid));
 
         Assert.assertFalse(requestContext.getFuture().isDone());
         LOG.info("Sending reply from device");
@@ -163,7 +163,7 @@ public class DeviceContextImplTest {
             LOG.error("Test failed when checking RequestContext.future", e);
             fail("fail");
         }
-        Assert.assertTrue(deviceContext.getRequests().isEmpty());
+        Assert.assertTrue(deviceContext.getNumberOfOutstandingRequests() == 0);
     }
 
     private static Error createError(final Xid xid) {
@@ -178,7 +178,7 @@ public class DeviceContextImplTest {
     public void testProcessReplyError() {
         LOG.info("Hooking RequestContext");
         deviceContext.hookRequestCtx(xid, requestContext);
-        Assert.assertEquals(requestContext, deviceContext.getRequests().get(xid.getValue()));
+        Assert.assertEquals(requestContext, deviceContext.lookupRequest(xid));
 
         Assert.assertFalse(requestContext.getFuture().isDone());
         LOG.info("Sending error reply from device");
@@ -199,14 +199,14 @@ public class DeviceContextImplTest {
             LOG.error("Test failed when checking RequestContext.future", e);
             fail("fail");
         }
-        Assert.assertTrue(deviceContext.getRequests().isEmpty());
+        Assert.assertTrue(deviceContext.getNumberOfOutstandingRequests() == 0);
     }
 
     @Test
     public void testProcessReplyList() {
         LOG.info("Hooking RequestContext");
         deviceContext.hookRequestCtx(xidMulti, requestContextMultiReply);
-        Assert.assertEquals(requestContextMultiReply, deviceContext.getRequests().get(xidMulti.getValue()));
+        Assert.assertEquals(requestContextMultiReply, deviceContext.lookupRequest(xidMulti));
 
         Assert.assertFalse(requestContextMultiReply.getFuture().isDone());
         LOG.info("Sending reply from device");
@@ -224,7 +224,7 @@ public class DeviceContextImplTest {
             LOG.error("Test failed when checking RequestContext.future", e);
             fail("fail");
         }
-        Assert.assertTrue(deviceContext.getRequests().isEmpty());
+        Assert.assertTrue(deviceContext.getNumberOfOutstandingRequests() == 0);
     }
 
     private static List<MultipartReply> createMultipartReplyList(final Xid xid) {
@@ -249,7 +249,7 @@ public class DeviceContextImplTest {
     public void testProcessException() {
         LOG.info("Hooking RequestContext");
         deviceContext.hookRequestCtx(xid, requestContext);
-        Assert.assertEquals(requestContext, deviceContext.getRequests().get(xid.getValue()));
+        Assert.assertEquals(requestContext, deviceContext.lookupRequest(xid));
 
         Assert.assertFalse(requestContext.getFuture().isDone());
 
@@ -270,7 +270,7 @@ public class DeviceContextImplTest {
             LOG.error("Test failed when checking RequestContext.future", e);
             fail("fail");
         }
-        Assert.assertTrue(deviceContext.getRequests().isEmpty());
+        Assert.assertTrue(deviceContext.getNumberOfOutstandingRequests() == 0);
     }
 
 }