[ 
https://issues.apache.org/jira/browse/CAMEL-21302?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17891834#comment-17891834
 ] 

Freeman Yue Fang commented on CAMEL-21302:
------------------------------------------

Hi [~davsclaus],

The exception
{code}
Failed to close span scope. This exception is ignored.
{code}
exists even without my changes when async mode is used here.

And it comes from the code
{code}
                } else if (event instanceof 
CamelEvent.ExchangeAsyncProcessingStartedEvent eap) {

                    // no need to filter scopes here. It's ok to close a scope 
multiple times and
                    // implementations check if the scope being disposed is 
current
                    // and should not do anything if scopes don't match.
                    ActiveSpanManager.endScope(eap.getExchange());
                }
{code}

If I read comments here correctly, this is by design.  
{code}
                    // no need to filter scopes here. It's ok to close a scope 
multiple times and
                    // implementations check if the scope being disposed is 
current
                    // and should not do anything if scopes don't match.
{code}

If we close the scope already in the expected thread, it should be OK to close 
it again in another thread, and that's why we see this exception and can ignore 
it. And as long as we close the scope already in the expected thread, there 
would be no context leak.

Best Regards
Freeman

> camel-opentelemetry context leak with direct async producer
> -----------------------------------------------------------
>
>                 Key: CAMEL-21302
>                 URL: https://issues.apache.org/jira/browse/CAMEL-21302
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-opentelemetry
>            Reporter: John Poth
>            Assignee: Freeman Yue Fang
>            Priority: Major
>             Fix For: 4.9.0
>
>
> There seems to be a Otel context leak when using a CXF producer in async 
> mode. This causes different requests to have the same _traceId._ As a 
> workaround, setting _synchronous=true_ on the CXF producer resolves the 
> issue. Here's a reproducer:
> {code:java}
> @Override
> protected RoutesBuilder createRouteBuilder() {
>     return new RouteBuilder() {
>         @Override
>         public void configure() {
>             from("direct:start").routeId("myRoute")
>                     .to("direct:send")
>                     .end();
>             from("direct:send")
>                     .log("message")
>                     .to("cxfrs:http://localhost:"; + port1
>                         + "/rest/helloservice/sayHello?synchronous=false"); 
> // setting to 'true' resolves the issue
>             restConfiguration()
>                     .port(port1);
>             rest("/rest/helloservice")
>                     .post("/sayHello").routeId("rest-GET-say-hi")
>                     .to("direct:sayHi");
>             from("direct:sayHi")
>                     .routeId("mock-GET-say-hi")
>                     .log("example")
>                     .to("mock:end");
> }};
> {code}
>  
> I've added the complete unit here: 
> https://github.com/apache/camel/blob/7d83a62b8e442dc9ac6fd79b153192add940301e/components/camel-opentelemetry/src/test/java/org/apache/camel/opentelemetry/AsyncCxfTest.java



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to