- final RequestContext requestContext = data.getRequestContext();
-
- Futures.addCallback(result, new FutureCallback<RpcResult<Void>>() {
- @Override
- public void onSuccess(final RpcResult<Void> voidRpcResult) {
- if (!voidRpcResult.isSuccessful()) {
- // remove current request from request cache in deviceContext
- messageSpy.spyMessage(flowModInput, MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE);
- deviceContext.unhookRequestCtx(requestContext.getXid());
- // handle requestContext failure
- StringBuilder rpcErrors = new StringBuilder();
- if (null != voidRpcResult.getErrors() && voidRpcResult.getErrors().size() > 0) {
- for (RpcError error : voidRpcResult.getErrors()) {
- rpcErrors.append(error.getMessage());
- }
- }
- LOG.trace("OF Java result for XID {} was not successful. Errors : {}", requestContext.getXid().getValue(), rpcErrors.toString());
- requestContext.getFuture().set(
- RpcResultBuilder.<T>failed().withRpcErrors(voidRpcResult.getErrors()).build());
- RequestContextUtil.closeRequstContext(requestContext);
- }
-
- }
-
- @Override
- public void onFailure(final Throwable throwable) {
- if (result.isCancelled()) {
- messageSpy.spyMessage(flowModInput, MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_SUCCESS);
- LOG.trace("Asymmetric message - no response from OF Java expected for XID {}. Closing as successful.", requestContext.getXid().getValue());
- requestContext.getFuture().set(RpcResultBuilder.<T>success().build());
- } else {
- messageSpy.spyMessage(flowModInput, MessageSpy.STATISTIC_GROUP.FROM_SWITCH_PUBLISHED_FAILURE);
- LOG.trace("Exception occured while processing OF Java response for XID {}.", requestContext.getXid().getValue(), throwable);
- requestContext.getFuture().set(
- RpcResultBuilder.<T>failed()
- .withError(RpcError.ErrorType.APPLICATION, "", "Flow translation to OF JAVA failed.")
- .build());
- }
-
- RequestContextUtil.closeRequstContext(requestContext);
-
- }
- });