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.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static class
ThreadLocalCurrentTraceContext.Builder
-
Nested classes/interfaces inherited from class brave.propagation.CurrentTraceContext
CurrentTraceContext.Default, CurrentTraceContext.Scope, CurrentTraceContext.ScopeDecorator
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
clear()
This component is backed by a possibly static shared thread local.static CurrentTraceContext
create()
TraceContext
get()
Returns the current span in scope or null if there isn't one.static ThreadLocalCurrentTraceContext.Builder
newBuilder()
CurrentTraceContext.Scope
newScope(TraceContext currentSpan)
Sets the current span in scope until the returned object is closed.-
Methods inherited from class brave.propagation.CurrentTraceContext
decorateScope, executor, executorService, maybeScope, wrap, wrap
-
-
-
-
Method Detail
-
create
public static CurrentTraceContext create()
-
newBuilder
public static ThreadLocalCurrentTraceContext.Builder newBuilder()
-
clear
public void clear()
This component is backed by a possibly static shared thread local. Call this to clear the reference when you are sure any residual state is due to a leak. This is generally only useful in tests.- Since:
- 5.11
-
get
public TraceContext get()
Description copied from class:CurrentTraceContext
Returns the current span in scope or null if there isn't one.- Specified by:
get
in classCurrentTraceContext
-
newScope
public CurrentTraceContext.Scope newScope(@Nullable TraceContext currentSpan)
Description copied from class:CurrentTraceContext
Sets the current span in scope until the returned object is closed. It is a programming error to drop or never close the result. Using try-with-resources is preferred for this reason.- Specified by:
newScope
in classCurrentTraceContext
- Parameters:
currentSpan
- span to place into scope or null to clear the scope
-
-