[GitHub] camel pull request #2448: CAMEL-12656: Fixed root span id for multiple route...

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

[GitHub] camel pull request #2448: CAMEL-12656: Fixed root span id for multiple route...

davsclaus-3
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.

----


---
Reply | Threaded
Open this post in threaded view
|

[GitHub] camel pull request #2448: CAMEL-12656: Fixed root span id for multiple route...

davsclaus-3
Github user davsclaus closed the pull request at:

    https://github.com/apache/camel/pull/2448


---