Skip to content

Commit 5b031c9

Browse files
committed
feat(core): Simplify context propagation
Avoid adding terminated contexts as span links and clearing them if not needed.
1 parent 7dc621f commit 5b031c9

File tree

1 file changed

+25
-26
lines changed

1 file changed

+25
-26
lines changed

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

+25-26
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import static datadog.trace.api.DDTags.DJM_ENABLED;
55
import static datadog.trace.api.DDTags.DSM_ENABLED;
66
import static datadog.trace.api.DDTags.PROFILING_CONTEXT_ENGINE;
7+
import static datadog.trace.api.TracePropagationBehaviorExtract.RESTART;
78
import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.BAGGAGE_CONCERN;
89
import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.DSM_CONCERN;
910
import static datadog.trace.bootstrap.instrumentation.api.AgentPropagation.TRACING_CONCERN;
@@ -31,7 +32,6 @@
3132
import datadog.trace.api.IdGenerationStrategy;
3233
import datadog.trace.api.StatsDClient;
3334
import datadog.trace.api.TraceConfig;
34-
import datadog.trace.api.TracePropagationBehaviorExtract;
3535
import datadog.trace.api.config.GeneralConfig;
3636
import datadog.trace.api.datastreams.AgentDataStreamsMonitoring;
3737
import datadog.trace.api.datastreams.PathwayContext;
@@ -1333,7 +1333,6 @@ public CoreSpanBuilder ignoreActiveSpan() {
13331333
}
13341334

13351335
private DDSpan buildSpan() {
1336-
addTerminatedContextAsLinks();
13371336
DDSpan span = DDSpan.create(instrumentationName, timestampMicro, buildSpanContext(), links);
13381337
if (span.isLocalRootSpan()) {
13391338
EndpointTracker tracker = tracer.onRootSpanStarted(span);
@@ -1344,6 +1343,22 @@ private DDSpan buildSpan() {
13441343
return span;
13451344
}
13461345

1346+
private void addParentContextAsLinks(AgentSpanContext parentContext) {
1347+
SpanLink link;
1348+
if (parentContext instanceof ExtractedContext) {
1349+
String headers = ((ExtractedContext) parentContext).getPropagationStyle().toString();
1350+
SpanAttributes attributes =
1351+
SpanAttributes.builder()
1352+
.put("reason", "propagation_behavior_extract")
1353+
.put("context_headers", headers)
1354+
.build();
1355+
link = DDSpanLink.from((ExtractedContext) parentContext, attributes);
1356+
} else {
1357+
link = SpanLink.from(parentContext);
1358+
}
1359+
withLink(link);
1360+
}
1361+
13471362
private void addTerminatedContextAsLinks() {
13481363
if (this.parent instanceof TagContext) {
13491364
List<AgentSpanLink> terminatedContextLinks =
@@ -1511,6 +1526,7 @@ private DDSpanContext buildSpanContext() {
15111526
spanId = this.spanId;
15121527
}
15131528

1529+
// Find the parent context
15141530
AgentSpanContext parentContext = parent;
15151531
if (parentContext == null && !ignoreScope) {
15161532
// use the Scope as parent unless overridden or ignored.
@@ -1519,35 +1535,18 @@ private DDSpanContext buildSpanContext() {
15191535
parentContext = activeSpan.context();
15201536
}
15211537
}
1522-
1523-
String parentServiceName = null;
1524-
boolean isRemote = false;
1525-
1526-
TracePropagationBehaviorExtract behaviorExtract =
1527-
Config.get().getTracePropagationBehaviorExtract();
1538+
// Handle remote terminated context as span links
15281539
if (parentContext != null && parentContext.isRemote()) {
1529-
if (behaviorExtract == TracePropagationBehaviorExtract.IGNORE) {
1530-
// reset links that may have come terminated span links
1531-
links = new ArrayList<>();
1532-
parentContext = null;
1533-
} else if (behaviorExtract == TracePropagationBehaviorExtract.RESTART) {
1534-
links = new ArrayList<>();
1535-
SpanLink link =
1536-
(parentContext instanceof ExtractedContext)
1537-
? DDSpanLink.from(
1538-
(ExtractedContext) parentContext,
1539-
SpanAttributes.builder()
1540-
.put("reason", "propagation_behavior_extract")
1541-
.put(
1542-
"context_headers",
1543-
((ExtractedContext) parentContext).getPropagationStyle().toString())
1544-
.build())
1545-
: SpanLink.from(parentContext);
1546-
links.add(link);
1540+
if (Config.get().getTracePropagationBehaviorExtract() == RESTART) {
1541+
addParentContextAsLinks(parentContext);
15471542
parentContext = null;
1543+
} else {
1544+
addTerminatedContextAsLinks();
15481545
}
15491546
}
15501547

1548+
String parentServiceName = null;
1549+
boolean isRemote = false; // TODO Simplify?
15511550
// Propagate internal trace.
15521551
// Note: if we are not in the context of distributed tracing and we are starting the first
15531552
// root span, parentContext will be null at this point.

0 commit comments

Comments
 (0)