Sourabh Taletiya created CAMEL-12656:
----------------------------------------
Summary: 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
Fix For: 2.21.2
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)