Skip to content

Commit 0af61a0

Browse files
committed
updating flare to implement reporter and store only root spans
1 parent 26f16be commit 0af61a0

File tree

4 files changed

+34
-28
lines changed

4 files changed

+34
-28
lines changed

dd-trace-core/src/main/java/datadog/trace/core/CoreTracer.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,8 +250,8 @@ PropagationTags.Factory getPropagationTagsFactory() {
250250
public void onRootSpanFinished(AgentSpan root, EndpointTracker tracker) {
251251
if (!root.isOutbound()) {
252252
profilingContextIntegration.onRootSpanFinished(root, tracker);
253-
TracerDump.suspendSpansFromRootSpan(root);
254253
}
254+
TracerDump.suspendRootSpan(root);
255255
}
256256

257257
/**
@@ -276,6 +276,7 @@ public EndpointTracker onRootSpanStarted(AgentSpan root) {
276276
if (!root.isOutbound()) {
277277
return profilingContextIntegration.onRootSpanStarted(root);
278278
}
279+
TracerDump.addActiveSpan(root);
279280
return null;
280281
}
281282

@@ -1300,7 +1301,6 @@ public CoreSpanBuilder ignoreActiveSpan() {
13001301
private DDSpan buildSpan() {
13011302
addTerminatedContextAsLinks();
13021303
DDSpan span = DDSpan.create(instrumentationName, timestampMicro, buildSpanContext(), links);
1303-
TracerDump.addActiveSpan(span, span.isLocalRootSpan());
13041304
if (span.isLocalRootSpan()) {
13051305
EndpointTracker tracker = tracer.onRootSpanStarted(span);
13061306
if (tracker != null) {

dd-trace-core/src/main/java/datadog/trace/core/PendingTrace.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -448,4 +448,8 @@ public static long getDurationNano(CoreSpan<?> span) {
448448
PendingTrace trace = (PendingTrace) traceCollector;
449449
return trace.getLastWriteTime() - span.getStartTime();
450450
}
451+
452+
public ConcurrentLinkedDeque<DDSpan> getSpans() {
453+
return spans;
454+
}
451455
}

dd-trace-core/src/main/java/datadog/trace/core/flare/TracerFlareService.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import datadog.trace.api.time.TimeUtils;
1010
import datadog.trace.core.CoreTracer;
1111
import datadog.trace.core.DDTraceCoreInfo;
12-
import datadog.trace.core.util.TracerDump;
1312
import datadog.trace.logging.GlobalLogLevelSwitcher;
1413
import datadog.trace.logging.LogLevel;
1514
import datadog.trace.util.AgentTaskScheduler;
@@ -216,7 +215,6 @@ private byte[] buildFlareZip(long startMillis, long endMillis, boolean dumpThrea
216215
addRuntime(zip);
217216
tracer.addTracerReportToFlare(zip);
218217
TracerFlare.addReportsToFlare(zip);
219-
TracerDump.dumpTrace(zip);
220218
if (dumpThreads) {
221219
addThreadDump(zip);
222220
}

dd-trace-core/src/main/java/datadog/trace/core/util/TracerDump.java

Lines changed: 28 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -3,41 +3,45 @@
33
import datadog.trace.api.flare.TracerFlare;
44
import datadog.trace.bootstrap.instrumentation.api.AgentSpan;
55
import datadog.trace.core.DDSpan;
6+
import datadog.trace.core.PendingTrace;
67
import java.io.IOException;
78
import java.lang.ref.WeakReference;
8-
import java.util.ArrayList;
9-
import java.util.HashMap;
10-
import java.util.List;
11-
import java.util.Map;
9+
import java.util.HashSet;
10+
import java.util.Set;
1211
import java.util.zip.ZipOutputStream;
1312

14-
public final class TracerDump {
15-
private static final Map<WeakReference<DDSpan>, List<WeakReference<DDSpan>>> activeSpans =
16-
new HashMap<>();
13+
public final class TracerDump implements TracerFlare.Reporter {
1714

18-
public static void addActiveSpan(final DDSpan span, boolean isRootSpan) {
19-
WeakReference<DDSpan> weakRootSpan =
20-
isRootSpan ? new WeakReference<>(span) : new WeakReference<>(span.getLocalRootSpan());
21-
if (isRootSpan) {
22-
List<WeakReference<DDSpan>> childSpans = new ArrayList<>();
23-
activeSpans.put(weakRootSpan, childSpans);
24-
}
25-
WeakReference<DDSpan> childSpan = new WeakReference<>(span);
26-
activeSpans.get(weakRootSpan).add(childSpan);
15+
private static final TracerDump INSTANCE = new TracerDump();
16+
17+
public static void register() {
18+
TracerFlare.addReporter(INSTANCE);
19+
}
20+
21+
private static final Set<WeakReference<DDSpan>> rootSpans = new HashSet<>();
22+
23+
public static void addActiveSpan(final AgentSpan rootSpan) {
24+
DDSpan rootDDSpan = (DDSpan) rootSpan;
25+
WeakReference<DDSpan> weakRootSpan = new WeakReference<>(rootDDSpan);
26+
rootSpans.add(weakRootSpan);
2727
}
2828

29-
public static void suspendSpansFromRootSpan(AgentSpan rootSpan) {
29+
public static void suspendRootSpan(final AgentSpan rootSpan) {
3030
DDSpan rootDDSpan = (DDSpan) rootSpan;
3131
WeakReference<DDSpan> weakRootSpan = new WeakReference<>(rootDDSpan);
32-
activeSpans.remove(weakRootSpan);
32+
rootSpans.remove(weakRootSpan);
3333
}
3434

35-
public static void dumpTrace(ZipOutputStream zip) throws IOException {
36-
for (List<WeakReference<DDSpan>> spans : activeSpans.values()) {
37-
for (WeakReference<DDSpan> weakSpan : spans) {
38-
DDSpan span = weakSpan.get();
39-
if (span != null) {
40-
TracerFlare.addText(zip, "trace_dump.txt", span.toString());
35+
@Override
36+
public void addReportToFlare(ZipOutputStream zip) throws IOException {
37+
for (WeakReference<DDSpan> weakRootSpan : rootSpans) {
38+
DDSpan rootSpan = weakRootSpan.get();
39+
if (rootSpan != null) {
40+
PendingTrace trace = (PendingTrace) rootSpan.context().getTraceCollector();
41+
if (trace != null) {
42+
for (DDSpan span : trace.getSpans()) {
43+
TracerFlare.addText(zip, "trace_dump.txt", span.toString());
44+
}
4145
}
4246
}
4347
}

0 commit comments

Comments
 (0)