- ListenableFuture<RpcResult<Void>> futureResultFromOfLib;
- synchronized (deviceContext) {
- futureResultFromOfLib = JdkFutureAdapters.listenInPoolThread(deviceContext.getPrimaryConnectionContext().getConnectionAdapter().setConfig(builder.build()));
- }
- OFJResult2RequestCtxFuture<SetConfigOutput> OFJResult2RequestCtxFuture = new OFJResult2RequestCtxFuture<>(requestContext, deviceContext);
- OFJResult2RequestCtxFuture.processResultFromOfJava(futureResultFromOfLib);
- return requestContext.getFuture();
+ final OutboundQueue outboundQueue = getDeviceContext().getPrimaryConnectionContext().getOutboundQueueProvider();
+
+ final SettableFuture<RpcResult<SetConfigOutput>> settableFuture = SettableFuture.create();
+ outboundQueue.commitEntry(xid.getValue(), builder.build(), new FutureCallback<OfHeader>() {
+ @Override
+ public void onSuccess(final OfHeader ofHeader) {
+ RequestContextUtil.closeRequstContext(requestContext);
+ getDeviceContext().unhookRequestCtx(requestContext.getXid());
+ getMessageSpy().spyMessage(FlowModInput.class, MessageSpy.STATISTIC_GROUP.TO_SWITCH_SUBMIT_SUCCESS);
+
+ settableFuture.set(RpcResultBuilder.<SetConfigOutput>success().build());
+ }
+
+ @Override
+ public void onFailure(final Throwable throwable) {
+ RpcResultBuilder rpcResultBuilder = RpcResultBuilder.<Void>failed().withError(RpcError.ErrorType.APPLICATION, throwable.getMessage(), throwable);
+ RequestContextUtil.closeRequstContext(requestContext);
+ getDeviceContext().unhookRequestCtx(requestContext.getXid());
+ settableFuture.set(rpcResultBuilder.build());
+ }
+ });
+ return settableFuture;
+