Class ThreadLocalCurrentTraceContext

java.lang.Object
brave.propagation.CurrentTraceContext
brave.propagation.ThreadLocalCurrentTraceContext
Direct Known Subclasses:
CurrentTraceContext.Default

public class ThreadLocalCurrentTraceContext
extends CurrentTraceContext
In-process trace context propagation backed by a static thread local.

Design notes

A static thread local ensures we have one context per thread, as opposed to one per thread- tracer. This means all tracer instances will be able to see any tracer's contexts.

The trade-off of this (instance-based reference) vs the reverse: trace contexts are not separated by tracer by default. For example, to make a trace invisible to another tracer, you have to use a non-default implementation.

Sometimes people make different instances of the tracer just to change configuration like the local service name. If we used a thread-instance approach, none of these would be able to see eachother's scopes. This would break Tracing.currentTracer() scope visibility in a way few would want to debug. It might be phrased as "MySQL always starts a new trace and I don't know why."

If you want a different behavior, use a different subtype of CurrentTraceContext, possibly your own, or raise an issue and explain what your use case is.