Created
June 8, 2021 13:31
-
-
Save luhenry/3aa72a060265ed69a9f89af968096a4e to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java | |
index 631425973..fb75d53dc 100644 | |
--- a/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java | |
+++ b/dd-trace-core/src/main/java/datadog/trace/core/DDSpan.java | |
@@ -16,6 +16,8 @@ import java.util.Map; | |
import java.util.concurrent.TimeUnit; | |
import java.util.concurrent.atomic.AtomicLong; | |
import javax.annotation.Nonnull; | |
+import jdk.jfr.RecordingContext; | |
+import jdk.jfr.RecordingContextEntry; | |
import org.slf4j.Logger; | |
import org.slf4j.LoggerFactory; | |
@@ -28,6 +30,13 @@ import org.slf4j.LoggerFactory; | |
public class DDSpan implements AgentSpan, CoreSpan<DDSpan> { | |
private static final Logger log = LoggerFactory.getLogger(DDSpan.class); | |
+ private static final RecordingContextEntry recordingContextTraceId = | |
+ RecordingContextEntry.forName("dd.trace.id"); | |
+ private static final RecordingContextEntry recordingContextSpanId = | |
+ RecordingContextEntry.forName("dd.span.id"); | |
+ | |
+ private final RecordingContext recordingContext; | |
+ | |
static DDSpan create(final long timestampMicro, @Nonnull DDSpanContext context) { | |
final DDSpan span = new DDSpan(timestampMicro, context); | |
log.debug("Started span: {}", span); | |
@@ -68,6 +77,12 @@ public class DDSpan implements AgentSpan, CoreSpan<DDSpan> { | |
private DDSpan(final long timestampMicro, @Nonnull DDSpanContext context) { | |
this.context = context; | |
+ this.recordingContext = | |
+ RecordingContext.builder() | |
+ .where(recordingContextTraceId, context.getTraceId().toString()) | |
+ .where(recordingContextSpanId, context.getSpanId().toString()) | |
+ .build(); | |
+ | |
if (timestampMicro <= 0L) { | |
// record the start time | |
startTimeMicro = Clock.currentMicroTime(); | |
@@ -89,6 +104,7 @@ public class DDSpan implements AgentSpan, CoreSpan<DDSpan> { | |
if (this.durationNano.compareAndSet(0, Math.max(1, durationNano))) { | |
log.debug("Finished span: {}", this); | |
context.getTrace().addFinishedSpan(this); | |
+ recordingContext.close(); | |
} else { | |
log.debug("Already finished: {}", this); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment