[
https://issues.apache.org/jira/browse/CAMEL-4246?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Claus Ibsen resolved CAMEL-4246.
--------------------------------
Resolution: Fixed
> 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.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