Comments (9)
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.
from opentracing-java.
Some prior art & discussions: DistributedTracing/continuation-local-storage-jvm#1
from opentracing-java.
@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.
@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.
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.
fyi, larger discussion here: opentracing/specification#23
from opentracing-java.
also see #115...
from opentracing-java.
(Closed by #115)
from opentracing-java.
Related Issues (20)
- Why doesn't Span support try-with-resources? HOT 4
- Docs reference outdated API HOT 3
- Correct way how to not report fast spans HOT 12
- Unit tests fail with "AbstractMethodError" HOT 2
- Access Custom Tracer's fields through GlobalTracer.get() HOT 4
- Overriding timestamp on spans HOT 3
- TextMapInjectAdapter does not implement TextMap HOT 1
- Not able to get simple opentracing code to work HOT 3
- Missing ScopeManager.active() method HOT 1
- `NoopSpan` cannot be used as a default, parent span without throwing Exception. HOT 6
- try-with-resources (which doesn't work) is still the main documented way to use OpenTracing in java
- Breaking change from 0.31 to 0.33 HOT 6
- TracingKafkaConsumer incompatible with Kafka >= 2.4.0 HOT 1
- access to registered tracer
- Migrating the CI CD from Travis to GitHub Actions HOT 4
- Are there version mappings to OpenTracing Specification?
- Span object is null when passing RequestEntity<?> as a request parameter
- Possible to terminate span on remote system? HOT 2
- State of opentracing-java HOT 1
- Why are some tags missing in the releases? HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from opentracing-java.