Merge pull request #1038 from DataDog/tyler/fix-size-operation
Avoid using ConcurrentLinkedDeque.size
This commit is contained in:
commit
cfa05b0410
|
@ -43,6 +43,9 @@ public class PendingTrace extends ConcurrentLinkedDeque<DDSpan> {
|
||||||
Collections.newSetFromMap(new ConcurrentHashMap<WeakReference<?>, Boolean>());
|
Collections.newSetFromMap(new ConcurrentHashMap<WeakReference<?>, Boolean>());
|
||||||
|
|
||||||
private final AtomicInteger pendingReferenceCount = new AtomicInteger(0);
|
private final AtomicInteger pendingReferenceCount = new AtomicInteger(0);
|
||||||
|
|
||||||
|
// We must maintain a separate count because ConcurrentLinkedDeque.size() is a linear operation.
|
||||||
|
private final AtomicInteger completedSpanCount = new AtomicInteger(0);
|
||||||
/**
|
/**
|
||||||
* During a trace there are cases where the root span must be accessed (e.g. priority sampling and
|
* During a trace there are cases where the root span must be accessed (e.g. priority sampling and
|
||||||
* trace-search tags).
|
* trace-search tags).
|
||||||
|
@ -209,6 +212,7 @@ public class PendingTrace extends ConcurrentLinkedDeque<DDSpan> {
|
||||||
final DDSpan span = it.next();
|
final DDSpan span = it.next();
|
||||||
if (span != rootSpan) {
|
if (span != rootSpan) {
|
||||||
partialTrace.add(span);
|
partialTrace.add(span);
|
||||||
|
completedSpanCount.decrementAndGet();
|
||||||
it.remove();
|
it.remove();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -254,6 +258,17 @@ public class PendingTrace extends ConcurrentLinkedDeque<DDSpan> {
|
||||||
return count > 0;
|
return count > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addFirst(final DDSpan span) {
|
||||||
|
super.addFirst(span);
|
||||||
|
completedSpanCount.incrementAndGet();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int size() {
|
||||||
|
return completedSpanCount.get();
|
||||||
|
}
|
||||||
|
|
||||||
private void addPendingTrace() {
|
private void addPendingTrace() {
|
||||||
final SpanCleaner cleaner = SPAN_CLEANER.get();
|
final SpanCleaner cleaner = SPAN_CLEANER.get();
|
||||||
if (cleaner != null) {
|
if (cleaner != null) {
|
||||||
|
|
Loading…
Reference in New Issue