Code Monkey home page Code Monkey logo

Comments (4)

srprash avatar srprash commented on July 19, 2024

Hi @rubenfonseca
Thanks for providing the code snippet. I was able to run it and confirm that the ## h subsegment indeed becomes the child of the Invocation subsegment. I debugged and found that the current entity when the h() method is being invoked is actually the ## f subsegment, however it doesn't become the parent when the method executes on the thread pool.

I noticed similar behavior in the code for official suggestion in the documentation.

I am still investigating the root cause but thought I would provide an update of my findings in the meantime. Apologies for the delay.

from aws-xray-sdk-python.

srprash avatar srprash commented on July 19, 2024

I suspect this _refresh_context method is the source of problem.
It tries to get a segment object from the current thread local(code). If this segment is not present, then the context is reinitialized (code) making the current entity to be the facade segment, which is essentially the Invocation subsegment in the final trace.

The question is why isn't the segment present on thread local attribute when the ## h subsegment is created in a thread pool execution?

from aws-xray-sdk-python.

rubenfonseca avatar rubenfonseca commented on July 19, 2024

Thank you for the update @srprash. When I dug into the problem, I come to basically the same conclusion. However, my python skills are not strong enough to understand why the thread local attribute is not present.

from aws-xray-sdk-python.

srprash avatar srprash commented on July 19, 2024

I did some more investigation and found that the thread local state is not being propagated between the main thread and the thread on the thread pool even though they share the same thread local instance. That explains why the segment stored in main thread is not present when ##h subsegment is created.
In a nutshell, multi-threading is not working as I expected. Found this SO post that is related to the behavior: https://stackoverflow.com/questions/72374802/shared-memory-in-threads-confusion

from aws-xray-sdk-python.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.