Skip to content

Commit 7cdfed7

Browse files
committed
Disable injection of span-links as tags when using OTLP since we can send them as first-class links (likewise turn off legacy baggage injection)
1 parent dafb834 commit 7cdfed7

File tree

9 files changed

+57
-12
lines changed

9 files changed

+57
-12
lines changed

dd-trace-api/src/main/java/datadog/trace/api/ConfigDefaults.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,6 @@ public final class ConfigDefaults {
4747
public static final boolean DEFAULT_STARTUP_LOGS_ENABLED = true;
4848

4949
static final boolean DEFAULT_INJECT_DATADOG_ATTRIBUTE = true;
50-
static final boolean DEFAULT_WRITER_BAGGAGE_INJECT = true;
5150
static final String DEFAULT_SITE = "datadoghq.com";
5251

5352
static final boolean DEFAULT_CODE_ORIGIN_FOR_SPANS_INTERFACE_SUPPORT = false;

dd-trace-api/src/main/java/datadog/trace/api/config/TracerConfig.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public final class TracerConfig {
1717
public static final String ID_GENERATION_STRATEGY = "id.generation.strategy";
1818
public static final String WRITER_TYPE = "writer.type";
1919
public static final String WRITER_BAGGAGE_INJECT = "writer.baggage.inject";
20+
public static final String WRITER_LINKS_INJECT = "writer.links.inject";
2021

2122
public static final String PRIORITIZATION_TYPE = "prioritization.type";
2223
public static final String TRACE_AGENT_URL = "trace.agent.url";

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

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,7 @@ public static final CoreTracerBuilder builder() {
209209
private final TimeSource timeSource;
210210
private final ProfilingContextIntegration profilingContextIntegration;
211211
private final boolean injectBaggageAsTags;
212+
private final boolean injectLinksAsTags;
212213
private final boolean flushOnClose;
213214
private final Collection<Runnable> shutdownListeners = new CopyOnWriteArrayList<>();
214215

@@ -326,6 +327,7 @@ public static class CoreTracerBuilder {
326327
private boolean reportInTracerFlare;
327328
private boolean pollForTracingConfiguration;
328329
private boolean injectBaggageAsTags;
330+
private boolean injectLinksAsTags;
329331
private boolean flushOnClose;
330332

331333
public CoreTracerBuilder serviceName(String serviceName) {
@@ -471,6 +473,11 @@ public CoreTracerBuilder injectBaggageAsTags(boolean injectBaggageAsTags) {
471473
return this;
472474
}
473475

476+
public CoreTracerBuilder injectLinksAsTags(boolean injectLinksAsTags) {
477+
this.injectLinksAsTags = injectLinksAsTags;
478+
return this;
479+
}
480+
474481
public CoreTracerBuilder flushOnClose(boolean flushOnClose) {
475482
this.flushOnClose = flushOnClose;
476483
return this;
@@ -506,6 +513,7 @@ public CoreTracerBuilder config(final Config config) {
506513
partialFlushMinSpans(config.getPartialFlushMinSpans());
507514
strictTraceWrites(config.isTraceStrictWritesEnabled());
508515
injectBaggageAsTags(config.isInjectBaggageAsTagsEnabled());
516+
injectLinksAsTags(config.isInjectLinksAsTagsEnabled());
509517
flushOnClose(config.isCiVisibilityEnabled());
510518
return this;
511519
}
@@ -538,6 +546,7 @@ public CoreTracer build() {
538546
reportInTracerFlare,
539547
pollForTracingConfiguration,
540548
injectBaggageAsTags,
549+
injectLinksAsTags,
541550
flushOnClose);
542551
}
543552
}
@@ -569,6 +578,7 @@ private CoreTracer(
569578
final boolean reportInTracerFlare,
570579
final boolean pollForTracingConfiguration,
571580
final boolean injectBaggageAsTags,
581+
final boolean injectLinksAsTags,
572582
final boolean flushOnClose) {
573583
this(
574584
config,
@@ -597,6 +607,7 @@ private CoreTracer(
597607
reportInTracerFlare,
598608
pollForTracingConfiguration,
599609
injectBaggageAsTags,
610+
injectLinksAsTags,
600611
flushOnClose);
601612
}
602613

@@ -628,6 +639,7 @@ private CoreTracer(
628639
final boolean reportInTracerFlare,
629640
final boolean pollForTracingConfiguration,
630641
final boolean injectBaggageAsTags,
642+
final boolean injectLinksAsTags,
631643
final boolean flushOnClose) {
632644

633645
assert localRootSpanTags != null;
@@ -864,6 +876,7 @@ private CoreTracer(
864876
propagationTagsFactory = PropagationTags.factory(config);
865877
this.profilingContextIntegration = profilingContextIntegration;
866878
this.injectBaggageAsTags = injectBaggageAsTags;
879+
this.injectLinksAsTags = injectLinksAsTags;
867880
this.flushOnClose = flushOnClose;
868881
this.allowInferredServices = SpanNaming.instance().namingSchema().allowInferredServices();
869882
if (profilingContextIntegration != ProfilingContextIntegration.NoOp.INSTANCE) {
@@ -2119,7 +2132,8 @@ protected static final DDSpanContext buildSpanContext(
21192132
tracer.disableSamplingMechanismValidation,
21202133
propagationTags,
21212134
tracer.profilingContextIntegration,
2122-
tracer.injectBaggageAsTags);
2135+
tracer.injectBaggageAsTags,
2136+
tracer.injectLinksAsTags);
21232137

21242138
// By setting the tags on the context we apply decorators to any tags that have been set via
21252139
// the builder. This is the order that the tags were added previously, but maybe the `tags`

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

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ public class DDSpanContext
184184

185185
private final ProfilingContextIntegration profilingContextIntegration;
186186
private final boolean injectBaggageAsTags;
187+
private final boolean injectLinksAsTags;
187188
private volatile int encodedOperationName;
188189
private volatile int encodedResourceName;
189190

@@ -238,6 +239,7 @@ public DDSpanContext(
238239
disableSamplingMechanismValidation,
239240
propagationTags,
240241
ProfilingContextIntegration.NoOp.INSTANCE,
242+
true,
241243
true);
242244
}
243245

@@ -261,7 +263,8 @@ public DDSpanContext(
261263
final PathwayContext pathwayContext,
262264
final boolean disableSamplingMechanismValidation,
263265
final PropagationTags propagationTags,
264-
final boolean injectBaggageAsTags) {
266+
final boolean injectBaggageAsTags,
267+
final boolean injectLinksAsTags) {
265268
this(
266269
traceId,
267270
spanId,
@@ -286,7 +289,8 @@ public DDSpanContext(
286289
disableSamplingMechanismValidation,
287290
propagationTags,
288291
ProfilingContextIntegration.NoOp.INSTANCE,
289-
injectBaggageAsTags);
292+
injectBaggageAsTags,
293+
injectLinksAsTags);
290294
}
291295

292296
public DDSpanContext(
@@ -313,7 +317,8 @@ public DDSpanContext(
313317
final boolean disableSamplingMechanismValidation,
314318
final PropagationTags propagationTags,
315319
final ProfilingContextIntegration profilingContextIntegration,
316-
final boolean injectBaggageAsTags) {
320+
final boolean injectBaggageAsTags,
321+
final boolean injectLinksAsTags) {
317322

318323
assert traceCollector != null;
319324
this.traceCollector = traceCollector;
@@ -370,6 +375,7 @@ public DDSpanContext(
370375
: traceCollector.getTracer().getPropagationTagsFactory().empty();
371376
this.propagationTags.updateTraceIdHighOrderBits(this.traceId.toHighOrderLong());
372377
this.injectBaggageAsTags = injectBaggageAsTags;
378+
this.injectLinksAsTags = injectLinksAsTags;
373379
if (origin != null) {
374380
setOrigin(origin);
375381
}
@@ -1177,10 +1183,14 @@ void processTagsAndBaggage(
11771183
// Tags
11781184
TagsPostProcessorFactory.lazyProcessor().processTags(unsafeTags, this, restrictedSpan);
11791185

1180-
String linksTag = DDSpanLink.toTag(restrictedSpan.getLinks());
1181-
if (linksTag != null) {
1182-
unsafeTags.put(SPAN_LINKS, linksTag);
1186+
// Links
1187+
if (injectLinksAsTags) {
1188+
String linksTag = DDSpanLink.toTag(restrictedSpan.getLinks());
1189+
if (linksTag != null) {
1190+
unsafeTags.set(SPAN_LINKS, linksTag);
1191+
}
11831192
}
1193+
11841194
// Baggage
11851195
Map<String, String> baggageItemsWithPropagationTags;
11861196
if (injectBaggageAsTags) {

dd-trace-core/src/test/groovy/datadog/trace/core/DDSpanSerializationTest.groovy

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,8 @@ class DDSpanSerializationTest extends DDCoreSpecification {
186186
NoopPathwayContext.INSTANCE,
187187
false,
188188
null,
189-
injectBaggage)
189+
injectBaggage,
190+
true)
190191
context.setAllTags(tags)
191192
def span = DDSpan.create("test", 0, context, null)
192193
CaptureBuffer capture = new CaptureBuffer()
@@ -262,7 +263,8 @@ class DDSpanSerializationTest extends DDCoreSpecification {
262263
NoopPathwayContext.INSTANCE,
263264
false,
264265
null,
265-
injectBaggage)
266+
injectBaggage,
267+
true)
266268
context.setAllTags(tags)
267269
def span = DDSpan.create("test", 0, context, null)
268270
CaptureBuffer capture = new CaptureBuffer()

dd-trace-core/src/test/groovy/datadog/trace/core/test/DDCoreSpecification.groovy

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ abstract class DDCoreSpecification extends DDSpecification {
113113
false,
114114
propagationTags,
115115
ProfilingContextIntegration.NoOp.INSTANCE,
116+
true,
116117
true)
117118

118119
def span = DDSpan.create("test", timestamp, context, null)

dd-trace-core/src/test/java/datadog/trace/core/DDCoreJavaSpecification.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ protected DDSpan buildSpan(
124124
false,
125125
propagationTags,
126126
ProfilingContextIntegration.NoOp.INSTANCE,
127+
true,
127128
true);
128129

129130
DDSpan span = DDSpan.create("test", timestamp, context, null);

internal-api/src/main/java/datadog/trace/api/Config.java

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,6 @@
181181
import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_INHERIT_SAMPLING;
182182
import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_MESSAGES_SEPARATE_TRACES;
183183
import static datadog.trace.api.ConfigDefaults.DEFAULT_WEBSOCKET_TAG_SESSION_ID;
184-
import static datadog.trace.api.ConfigDefaults.DEFAULT_WRITER_BAGGAGE_INJECT;
185184
import static datadog.trace.api.ConfigSetting.NON_DEFAULT_SEQ_ID;
186185
import static datadog.trace.api.DDTags.APM_ENABLED;
187186
import static datadog.trace.api.DDTags.HOST_TAG;
@@ -683,6 +682,7 @@
683682
import static datadog.trace.api.config.TracerConfig.TRACE_STRICT_WRITES_ENABLED;
684683
import static datadog.trace.api.config.TracerConfig.TRACE_X_DATADOG_TAGS_MAX_LENGTH;
685684
import static datadog.trace.api.config.TracerConfig.WRITER_BAGGAGE_INJECT;
685+
import static datadog.trace.api.config.TracerConfig.WRITER_LINKS_INJECT;
686686
import static datadog.trace.api.config.TracerConfig.WRITER_TYPE;
687687
import static datadog.trace.api.telemetry.LogCollector.SEND_TELEMETRY;
688688
import static datadog.trace.util.CollectionUtils.tryMakeImmutableList;
@@ -837,6 +837,7 @@ public static String getHostName() {
837837
private final boolean integrationSynapseLegacyOperationName;
838838
private final String writerType;
839839
private final boolean injectBaggageAsTagsEnabled;
840+
private final boolean injectLinksAsTagsEnabled;
840841
private final boolean agentConfiguredUsingDefault;
841842
private final String agentUrl;
842843
private final String agentHost;
@@ -1432,8 +1433,10 @@ private Config(final ConfigProvider configProvider, final InstrumenterConfig ins
14321433
integrationSynapseLegacyOperationName =
14331434
configProvider.getBoolean(INTEGRATION_SYNAPSE_LEGACY_OPERATION_NAME, false);
14341435
writerType = configProvider.getString(WRITER_TYPE, DEFAULT_AGENT_WRITER_TYPE);
1436+
boolean isDatadogTraceWriter = !isTraceOtlpExporterEnabled();
14351437
injectBaggageAsTagsEnabled =
1436-
configProvider.getBoolean(WRITER_BAGGAGE_INJECT, DEFAULT_WRITER_BAGGAGE_INJECT);
1438+
configProvider.getBoolean(WRITER_BAGGAGE_INJECT, isDatadogTraceWriter);
1439+
injectLinksAsTagsEnabled = configProvider.getBoolean(WRITER_LINKS_INJECT, isDatadogTraceWriter);
14371440
String lambdaInitType = getEnv("AWS_LAMBDA_INITIALIZATION_TYPE");
14381441
if (lambdaInitType != null && lambdaInitType.equals("snap-start")) {
14391442
secureRandom = true;
@@ -3231,6 +3234,10 @@ public boolean isInjectBaggageAsTagsEnabled() {
32313234
return injectBaggageAsTagsEnabled;
32323235
}
32333236

3237+
public boolean isInjectLinksAsTagsEnabled() {
3238+
return injectLinksAsTagsEnabled;
3239+
}
3240+
32343241
public boolean isAgentConfiguredUsingDefault() {
32353242
return agentConfiguredUsingDefault;
32363243
}
@@ -6302,6 +6309,8 @@ public String toString() {
63026309
+ traceFlushIntervalSeconds
63036310
+ ", injectBaggageAsTagsEnabled="
63046311
+ injectBaggageAsTagsEnabled
6312+
+ ", injectLinksAsTagsEnabled="
6313+
+ injectLinksAsTagsEnabled
63056314
+ ", logsInjectionEnabled="
63066315
+ logsInjectionEnabled
63076316
+ ", appLogsCollectionEnabled="

metadata/supported-configurations.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11241,6 +11241,14 @@
1124111241
"aliases": []
1124211242
}
1124311243
],
11244+
"DD_WRITER_LINKS_INJECT": [
11245+
{
11246+
"version": "A",
11247+
"type": "boolean",
11248+
"default": "true",
11249+
"aliases": []
11250+
}
11251+
],
1124411252
"DD_WRITER_TYPE": [
1124511253
{
1124611254
"version": "A",

0 commit comments

Comments
 (0)