git.net

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

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


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.

----


---



( ! ) Warning: include(msgfooter.php): failed to open stream: No such file or directory in /var/www/git/apache-camel-development/msg04526.html on line 158
Call Stack
#TimeMemoryFunctionLocation
10.0006368728{main}( ).../msg04526.html:0

( ! ) Warning: include(): Failed opening 'msgfooter.php' for inclusion (include_path='.:/var/www/git') in /var/www/git/apache-camel-development/msg04526.html on line 158
Call Stack
#TimeMemoryFunctionLocation
10.0006368728{main}( ).../msg04526.html:0