From f55fba5cc124ab2ad5990e60c492f9e92e08085f Mon Sep 17 00:00:00 2001 From: Timotej Kubas Date: Wed, 22 Apr 2015 11:30:10 +0200 Subject: [PATCH] added requestMap access methods Change-Id: If5d3864dfa2751e936fd7da51db88f7e63172b53 Signed-off-by: Timotej Kubas --- .../api/openflow/device/DeviceContext.java | 18 ++++++++++--- .../impl/device/BarrierTaskBuilder.java | 2 +- .../impl/device/DeviceContextImpl.java | 27 ++++++++++++------- .../services/OFJResult2RequestCtxFuture.java | 2 +- .../impl/services/SalFlowServiceImpl.java | 2 +- .../impl/device/DeviceContextImplTest.java | 16 +++++------ 6 files changed, 44 insertions(+), 23 deletions(-) diff --git a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java index 68b4e17e38..86315b1af1 100644 --- a/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java +++ b/openflowplugin-api/src/main/java/org/opendaylight/openflowplugin/api/openflow/device/DeviceContext.java @@ -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 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. * diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/BarrierTaskBuilder.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/BarrierTaskBuilder.java index b1929d849e..a2f83b9743 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/BarrierTaskBuilder.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/BarrierTaskBuilder.java @@ -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> future = deviceCtx.getPrimaryConnectionContext() diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java index 356d95ee3e..b49773ac3f 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImpl.java @@ -188,16 +188,25 @@ public class DeviceContextImpl implements DeviceContext { } @Override - public Map 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 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 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> rpcResult = RpcResultBuilder .>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> rpcResult = RpcResultBuilder .>failed() .withError(RpcError.ErrorType.APPLICATION, String.format("Message processing failed : %s", deviceDataException.getError()), deviceDataException) diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OFJResult2RequestCtxFuture.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OFJResult2RequestCtxFuture.java index ea3dbd380b..cc2d15a67f 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OFJResult2RequestCtxFuture.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/OFJResult2RequestCtxFuture.java @@ -42,7 +42,7 @@ public class OFJResult2RequestCtxFuture { 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) { diff --git a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java index 8eb53f2148..916b546a4e 100644 --- a/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java +++ b/openflowplugin-impl/src/main/java/org/opendaylight/openflowplugin/impl/services/SalFlowServiceImpl.java @@ -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) { diff --git a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java index 1fa1a92a99..5c4e508ffc 100644 --- a/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java +++ b/openflowplugin-impl/src/test/java/org/opendaylight/openflowplugin/impl/device/DeviceContextImplTest.java @@ -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 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); } } -- 2.36.6