[
https://issues.apache.org/jira/browse/CAMEL-12656?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ramu updated CAMEL-12656:
-------------------------
Description:
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.
was:
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.
> 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.22.1, 2.23.0, 2.21.3
>
> 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)