From: Martin Bobak Date: Wed, 20 May 2015 12:12:02 +0000 (+0200) Subject: future from request context should be always returned X-Git-Tag: release/lithium~125 X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=commitdiff_plain;h=413c1f3b7927d8f44ce2af84f81ae1843e01319c;p=openflowplugin.git future from request context should be always returned Change-Id: Ic6fd71a1372c431cbffa13242e7fba64f527fdb0 Signed-off-by: Martin Bobak --- 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 3912e02798..72ac619220 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 @@ -103,15 +103,15 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService @Override public Future> removeFlow(final RemoveFlowInput input) { LOG.trace("Calling remove flow for flow with ID ={}.", input.getFlowRef()); - return this.handleServiceCall(new Function, ListenableFuture>>() { + return this.handleServiceCall(new Function, ListenableFuture>>() { @Override - public ListenableFuture> apply(final RequestContext requestContext) { + public ListenableFuture> apply(final RequestContext requestContext) { final FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, getVersion(), getDatapathId()); - final ListenableFuture> future = createResultForFlowMod(requestContext, ofFlowModInput); - Futures.addCallback(future, new FutureCallback>() { + final ListenableFuture> future = createResultForFlowMod(requestContext, ofFlowModInput); + Futures.addCallback(future, new FutureCallback>() { @Override - public void onSuccess(final RpcResult o) { + public void onSuccess(final RpcResult o) { final DeviceContext deviceContext = getDeviceContext(); getMessageSpy().spyMessage(input.getImplementedInterface(), MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMIT_SUCCESS); FlowHash flowHash = FlowHashFactory.create(input, deviceContext.getPrimaryConnectionContext().getFeatures().getVersion()); @@ -124,7 +124,7 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService LOG.trace("Flow modification failed..", throwable); StringBuilder errors = new StringBuilder(); try { - RpcResult result = future.get(); + RpcResult result = future.get(); Collection rpcErrors = result.getErrors(); if (null != rpcErrors && rpcErrors.size() > 0) { for (RpcError rpcError : rpcErrors) { @@ -199,9 +199,9 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService for (final FlowModInputBuilder flowModInputBuilder : ofFlowModInputs) { ListenableFuture> partialFuture = handleServiceCall( - new Function, ListenableFuture>>() { + new Function, ListenableFuture>>() { @Override - public ListenableFuture> apply(final RequestContext requestContext) { + public ListenableFuture> apply(final RequestContext requestContext) { return createResultForFlowMod(requestContext, flowModInputBuilder); } }); @@ -227,30 +227,32 @@ public class SalFlowServiceImpl extends CommonService implements SalFlowService return finalFuture; } - protected ListenableFuture> createResultForFlowMod(final RequestContext requestContext, final FlowModInputBuilder flowModInputBuilder) { + protected ListenableFuture> createResultForFlowMod(final RequestContext requestContext, final FlowModInputBuilder flowModInputBuilder) { final OutboundQueue outboundQueue = getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider(); final long xid = requestContext.getXid().getValue(); flowModInputBuilder.setXid(xid); final FlowModInput flowModInput = flowModInputBuilder.build(); - final SettableFuture> settableFuture = SettableFuture.create(); outboundQueue.commitEntry(xid, flowModInput, new FutureCallback() { @Override public void onSuccess(final OfHeader ofHeader) { - RequestContextUtil.closeRequstContext(requestContext); getMessageSpy().spyMessage(FlowModInput.class, MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMIT_SUCCESS); - settableFuture.set(SUCCESSFUL_RPCRESULT); + RpcResultBuilder rpcResultBuilder = RpcResultBuilder.success(); + requestContext.setResult(rpcResultBuilder.build()); + + RequestContextUtil.closeRequstContext(requestContext); } @Override public void onFailure(final Throwable throwable) { - RpcResultBuilder rpcResultBuilder = RpcResultBuilder.failed().withError(ErrorType.APPLICATION, throwable.getMessage(), throwable); + RpcResultBuilder rpcResultBuilder = RpcResultBuilder.failed().withError(ErrorType.APPLICATION, throwable.getMessage(), throwable); + requestContext.setResult(rpcResultBuilder.build()); + RequestContextUtil.closeRequstContext(requestContext); - settableFuture.set(rpcResultBuilder.build()); } }); - return settableFuture; + return requestContext.getFuture(); } }