GitHub user st2654 opened a pull request: https://github.com/apache/camel/pull/2448
CAMEL-12656: Fixed root span id for multiple routes. https://issues.apache.org/jira/browse/CAMEL-12656 I have added screenshots in Jira already. Camel-Zipkin does not report traces with root span id when there are multiple routes. For example: `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);` 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 // 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 + "]"; } }); 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. You can merge this pull request into a Git repository by running: $ git pull https://github.com/st2654/camel CAMEL-12656 Alternatively you can review and apply these changes as the patch at: https://github.com/apache/camel/pull/2448.patch To close this pull request, make a commit to your master/trunk branch with (at least) the following in the commit message: This closes #2448 ---- commit ca7fdaecc6645506a81c24409602ba3819b169b5 Author: Sourabh Taletiya <st2654@...> Date: 2018-08-01T03:49:24Z CAMEL-12656: Fixed root span id for multiple routes. ---- ---