You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@camel.apache.org by "Claus Ibsen (JIRA)" <ji...@apache.org> on 2011/09/02 11:52:09 UTC

[jira] [Updated] (CAMEL-4246) TraceInterceptor does not work correctly for AsyncProcessing

     [ https://issues.apache.org/jira/browse/CAMEL-4246?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Claus Ibsen updated CAMEL-4246:
-------------------------------

    Fix Version/s: 2.8.1

> TraceInterceptor does not work correctly for AsyncProcessing
> ------------------------------------------------------------
>
>                 Key: CAMEL-4246
>                 URL: https://issues.apache.org/jira/browse/CAMEL-4246
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-core
>    Affects Versions: 2.7.1
>            Reporter: Yaytay
>            Assignee: Claus Ibsen
>            Priority: Minor
>             Fix For: 2.8.1, 2.9.0
>
>
> TraceEventHandlers are not called correctly when a node is processed asynchronously.
> From  org.apache.camel.processor.interceptor.TraceInterceptor:
>             try {
>                 // special for interceptor where we need to keep booking how far we have routed in the intercepted processors
>                 if (node.getParent() instanceof InterceptDefinition && exchange.getUnitOfWork() != null) {
>                     TracedRouteNodes traced = exchange.getUnitOfWork().getTracedRouteNodes();
>                     traceIntercept((InterceptDefinition) node.getParent(), traced, exchange);
>                 }
>                 // process the exchange
>                 try {
>                     sync = super.process(exchange, callback);
>                 } catch (Throwable e) {
>                     exchange.setException(e);
>                 }
>             } finally {
>                 // after (trace out)
>                 if (shouldLog && tracer.isTraceOutExchanges()) {
>                     logExchange(exchange);
>                     traceExchangeOut(exchange, traceState);
>                 }
>             }
> As it is this results in traceExchangeOut being called before the callback, which is wrong.
> The call to super.process needs to wrap the callback to call traceExchangeOut (and the finally block shouldn't run if the process is asynch).
> This isn't a regression, but the change to make more routes asynchronous makes it more noticeable.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira