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

Claus Ibsen updated CAMEL-19124:
--------------------------------
    Fix Version/s: 3.20.3
                   3.21.0
                   4.0-M3
                   4.0

> Tracer doesn't continue spans for AbstractInternalSpanDecorator
> ---------------------------------------------------------------
>
>                 Key: CAMEL-19124
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19124
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-tracing
>    Affects Versions: 3.20.2, 3.x, 4.0
>            Reporter: Marcin Grzejszczak
>            Priority: Major
>             Fix For: 3.20.3, 3.21.0, 4.0-M3, 4.0
>
>         Attachments: trace_view_with_fix.png, trace_view_without_fix.png
>
>
> As discussed in the [PR|https://github.com/apache/camel/pull/9389] it seems 
> that the `Tracer`component from `camel-tracing` is not continuing spans if a 
> `AbstractInternalSpanDecorator` is being created. So for the following route
> {code:java}
> from("direct://foo")
>                               .log("hello")
>                               .to("direct://bar")
>                               .to("http://example.org";);
>               from("direct://bar")
>                               .log("hello")
>                               .to("direct://micrometer")
>                               .to("http://example.org";);
>               from("direct://micrometer")
>                               
> .setHeader(MicrometerConstants.HEADER_METRIC_NAME, constant("new.name"))
>                               
> .setHeader(MicrometerConstants.HEADER_METRIC_TAGS, 
> constant(Tags.of("dynamic-key", "dynamic-value")))
>                               
> .to("micrometer:counter:name.not.used?tags=key=value")
>                               .to("direct://baz");
>               from("direct://baz")
>                               .log("hello")
>                               .to("bean:com.example.cameldemo.MyBean")
>                               .to("exec:wc?args=--words 
> /usr/share/dict/words")
>                               .process(exchange -> {
>                                       // Use the Camel Exec String type 
> converter to convert the ExecResult to String
>                                       // In this case, the stdout is 
> considered as output
>                                       String wordCountOutput = 
> exchange.getIn().getBody(String.class);
>                                       // do something with the word count
>                                       System.out.println(wordCountOutput);
>                               })
>                               .to("file:///tmp/camel-outputdir?flatten=true")
>                               .to("http://example.org";);
> {code}
> you will get multiple traces since the `direct` components are not linked 
> together (they are treated as a start of a new trace).
>  !trace_view_without_fix.png! 
> I think we agreed that for this route example, multiple routes are linked 
> together but all in all they form a single trace. So if 
> `org.apache.camel.tracing.Tracer.TracingEventNotifier#shouldExclude` would be 
> changed from 
> {code:java}
> private boolean shouldExclude(SpanDecorator sd, Exchange exchange, Endpoint 
> endpoint) {
>             return sd instanceof AbstractInternalSpanDecorator || 
> !sd.newSpan()
>                     || isExcluded(exchange, endpoint);
>         }
> {code}
> to
> {code:java}
> private boolean shouldExclude(SpanDecorator sd, Exchange exchange, Endpoint 
> endpoint) {
>             return !sd.newSpan()
>                     || isExcluded(exchange, endpoint);
>         }
> {code}
> then the span parent-child relationship gets maintained the way it should
>  !trace_view_with_fix.png! 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to