- java.lang.Object
-
- java.lang.ref.ReferenceQueue<TraceContext>
-
- brave.internal.recorder.PendingSpans
-
public final class PendingSpans extends java.lang.ref.ReferenceQueue<TraceContext>
Similar to Finagle's deadline span map, except this is GC pressure as opposed to timeout driven. This means there's no bookkeeping thread required in order to flush orphaned spans. Work here is stolen from callers, though. For example, a call toTracer.nextSpan()implicitly performs a check for orphans, invoking any handler that applies.Spans are weakly referenced by their owning context. When the keys are collected, they are transferred to a queue, waiting to be reported. A call to modify any span will implicitly flush orphans to Zipkin. Spans in this state will have a "brave.flush" annotation added to them.
The internal implementation is derived from WeakConcurrentMap by Rafael Winterhalter. See https://github.com/raphw/weak-lock-free/blob/master/src/main/java/com/blogspot/mydailyjava/weaklockfree/WeakConcurrentMap.java
-
-
Constructor Summary
Constructors Constructor Description PendingSpans(Clock clock, FinishedSpanHandler orphanedSpanHandler, java.util.concurrent.atomic.AtomicBoolean noop)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description PendingSpangetOrCreate(TraceContext context, boolean start)booleanremove(TraceContext context)java.lang.StringtoString()
-
-
-
Constructor Detail
-
PendingSpans
public PendingSpans(Clock clock, FinishedSpanHandler orphanedSpanHandler, java.util.concurrent.atomic.AtomicBoolean noop)
-
-
Method Detail
-
getOrCreate
public PendingSpan getOrCreate(TraceContext context, boolean start)
-
remove
public boolean remove(TraceContext context)
- See Also:
Span.abandon()
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-