[
https://issues.apache.org/jira/browse/CAMEL-12656?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16564708#comment-16564708
]
ASF GitHub Bot commented on CAMEL-12656:
----------------------------------------
st2654 commented on issue #2448: CAMEL-12656: Fixed root span id for multiple
routes.
URL: https://github.com/apache/camel/pull/2448#issuecomment-409443582
I want it to be part of SpringBoot 1.X and camel release 2.21.3 if possible.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
> camel-zipkin - Root Span Id is not reported if the route calls multiple route
> -----------------------------------------------------------------------------
>
> Key: CAMEL-12656
> URL: https://issues.apache.org/jira/browse/CAMEL-12656
> Project: Camel
> Issue Type: Bug
> Components: camel-zipkin
> Affects Versions: 2.21.1
> Reporter: Sourabh Taletiya
> Priority: Major
> Fix For: 2.21.3, 2.22.1, 2.23.0
>
> Attachments: Traces breaking.png, Traces fixed 1.png, Traces fixed
> 2.png
>
>
> Camel-Zipkin does not report traces with root span id when there are multiple
> routes.
> For example:
>
> {code:java}
> from("direct:foo")
> .delay(1000)
> .to("direct:bar")
> .to("direct:moo")
> .to("direct:tar");
> from("direct:bar")
> .delay(2000);
> from("direct:moo")
> .delay(1000);
> from("direct:tar")
> .delay(3000);
> {code}
> Root SpanId(TraceId) should be for service-name = direct:foo and the trace in
> UI should show all the 4 routes in one sequence. But it breaks. Check the
> attached screenshot: Traces Breaking.png
> I looked into the code and figured out why its happening. Here is the code
> which is breaking the functionality.
> Class Name: ZipkinTracer.ZipkinRoutePolicy
> Inside onExchangeBegin() method
>
> {code:java}
> // add on completion after the route is done, but before the consumer writes
> the response
> // this allows us to track the zipkin event before returning the response
> which is the right time
> exchange.addOnCompletion(new SynchronizationAdapter() {
> @Override
> public void onAfterRoute(Route route, Exchange exchange) {
> String serviceName = getServiceName(exchange, route.getEndpoint(),
> true, false);
> Brave brave = getBrave(serviceName);
> if (brave != null) {
> serverResponse(brave, serviceName, exchange);
> }
> }
> @Override
> public String toString() {
> return "ZipkinTracerOnCompletion[" + routeId + "]";
> }
> });
> {code}
>
>
> Using onAfterRoute() : if the exchange is being routed through multiple
> routes, there will be callbacks for each route.
> I have fix for it:
> If I use onExchangeDone() instead of above code. The traces are reported
> properly. Check screenshots.
> [https://zipkin.io/pages/instrumenting.html]
> *Note* This process must be repeated if the service makes multiple downstream
> calls. That is each subsequent span will have the same trace id and parent
> id, but a new and different span id.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)