[ 
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

        

Reply via email to