@Override
public Future<RpcResult<RemoveFlowOutput>> removeFlow(final RemoveFlowInput input) {
LOG.trace("Calling remove flow for flow with ID ={}.", input.getFlowRef());
- return this.<RemoveFlowOutput, Void>handleServiceCall(new Function<RequestContext<RemoveFlowOutput>, ListenableFuture<RpcResult<Void>>>() {
+ return this.handleServiceCall(new Function<RequestContext<RemoveFlowOutput>, ListenableFuture<RpcResult<RemoveFlowOutput>>>() {
@Override
- public ListenableFuture<RpcResult<Void>> apply(final RequestContext<RemoveFlowOutput> requestContext) {
+ public ListenableFuture<RpcResult<RemoveFlowOutput>> apply(final RequestContext<RemoveFlowOutput> requestContext) {
final FlowModInputBuilder ofFlowModInput = FlowConvertor.toFlowModInput(input, getVersion(),
getDatapathId());
- final ListenableFuture<RpcResult<Void>> future = createResultForFlowMod(requestContext, ofFlowModInput);
- Futures.addCallback(future, new FutureCallback<RpcResult<Void>>() {
+ final ListenableFuture<RpcResult<RemoveFlowOutput>> future = createResultForFlowMod(requestContext, ofFlowModInput);
+ Futures.addCallback(future, new FutureCallback<RpcResult<RemoveFlowOutput>>() {
@Override
- public void onSuccess(final RpcResult<Void> o) {
+ public void onSuccess(final RpcResult<RemoveFlowOutput> 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());
LOG.trace("Flow modification failed..", throwable);
StringBuilder errors = new StringBuilder();
try {
- RpcResult<Void> result = future.get();
+ RpcResult<RemoveFlowOutput> result = future.get();
Collection<RpcError> rpcErrors = result.getErrors();
if (null != rpcErrors && rpcErrors.size() > 0) {
for (RpcError rpcError : rpcErrors) {
for (final FlowModInputBuilder flowModInputBuilder : ofFlowModInputs) {
ListenableFuture<RpcResult<T>> partialFuture = handleServiceCall(
- new Function<RequestContext<T>, ListenableFuture<RpcResult<Void>>>() {
+ new Function<RequestContext<T>, ListenableFuture<RpcResult<T>>>() {
@Override
- public ListenableFuture<RpcResult<Void>> apply(final RequestContext<T> requestContext) {
+ public ListenableFuture<RpcResult<T>> apply(final RequestContext<T> requestContext) {
return createResultForFlowMod(requestContext, flowModInputBuilder);
}
});
return finalFuture;
}
- protected <T> ListenableFuture<RpcResult<Void>> createResultForFlowMod(final RequestContext<T> requestContext, final FlowModInputBuilder flowModInputBuilder) {
+ protected <T> ListenableFuture<RpcResult<T>> createResultForFlowMod(final RequestContext<T> 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<RpcResult<Void>> settableFuture = SettableFuture.create();
outboundQueue.commitEntry(xid, flowModInput, new FutureCallback<OfHeader>() {
@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<T> rpcResultBuilder = RpcResultBuilder.<T>success();
+ requestContext.setResult(rpcResultBuilder.build());
+
+ RequestContextUtil.closeRequstContext(requestContext);
}
@Override
public void onFailure(final Throwable throwable) {
- RpcResultBuilder<Void> rpcResultBuilder = RpcResultBuilder.<Void>failed().withError(ErrorType.APPLICATION, throwable.getMessage(), throwable);
+ RpcResultBuilder<T> rpcResultBuilder = RpcResultBuilder.<T>failed().withError(ErrorType.APPLICATION, throwable.getMessage(), throwable);
+ requestContext.setResult(rpcResultBuilder.build());
+
RequestContextUtil.closeRequstContext(requestContext);
- settableFuture.set(rpcResultBuilder.build());
}
});
- return settableFuture;
+ return requestContext.getFuture();
}
}