GithubHelp home page GithubHelp logo

Comments (9)

toaler avatar toaler commented on August 20, 2024 1

We ended up creating a Span factory that provides static methods to create/destroy spans that set/remove the span from thread local. The factory also allows us to get the span in context on the corresponding thread (similar to TraceContext.getCurrentSpan()). Have not considered cross thread communication as of yet.

from opentracing-java.

yurishkuro avatar yurishkuro commented on August 20, 2024

cc @michaelsembwever @oibe

from opentracing-java.

yurishkuro avatar yurishkuro commented on August 20, 2024

Some prior art & discussions: DistributedTracing/continuation-local-storage-jvm#1

from opentracing-java.

jmacd avatar jmacd commented on August 20, 2024

@bensigelman What you posted looks good, but I recall Google didn't promote the use of wrapped Runnable objects as much as it promoted the use of a new threads for each span, so there was effectively not a stack. The RPC client never had to swap the span because it blocked, and the server never had to swap the span because it created or re-used a thread. e.g.,

  new TraceContextThread(SpanBuilder.SetOperation(...).
      StartSpan(TraceContext.getCurrentSpan() /* i.e., parent */), new Runnable() {
    public void run() { ... }
  }).start();

from opentracing-java.

yurishkuro avatar yurishkuro commented on August 20, 2024

@toaler can you point to or paste some code examples? From your description of the "factory" it seems it had a much richer API than needed purely for propagating span via TLS. We wouldn't want to replicate OT API for spans in another class.

from opentracing-java.

sjoerdtalsma avatar sjoerdtalsma commented on August 20, 2024

What do you think of the following approach?

I'm in the process of releasing a 'context-propagation' library where I abstracted the 'Context' concept and created a Service interface for ContextManager and a utility-class ContextManagers that allows taking a snapshot of 'all' compatible Context implementations.
This snapshot can be 'reactivated' in another thread, returning an AutoCloseable instance, restoring the state after use.
An abstract ThreadLocal based context implementation is provided that effectively restores the state in a stack-like fashion when closed.
Having your own Context implementation cooperate in the propagation only requires declaring your ContextManager's classname in a META-INF/services property file.

https://github.com/talsma-ict/context-propagation

I would be willing to provide an implementation in 'contrib' that uses this construct to manage spans with implicit context, using delegation to existing Tracer implementations..

from opentracing-java.

yurishkuro avatar yurishkuro commented on August 20, 2024

fyi, larger discussion here: opentracing/specification#23

from opentracing-java.

bhs avatar bhs commented on August 20, 2024

also see #115...

from opentracing-java.

bhs avatar bhs commented on August 20, 2024

(Closed by #115)

from opentracing-java.

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.