Skip to content

Commit 6956c7d

Browse files
dougqhclaude
andcommitted
Skip tag extractors and contributors on immutable spans
NoopSpan (via ImmutableSpan) discards every tag, but inherited the setTagsFrom defaults, so an extractor or contributor still ran its metadata access and side effects with tracing disabled. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
1 parent 7727940 commit 6956c7d

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

‎internal-api/src/main/java/datadog/trace/bootstrap/instrumentation/api/ImmutableSpan.java‎

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,20 @@ public AgentSpan setAllTags(Map<String, ?> map) {
6262
return this;
6363
}
6464

65+
/** Skips the extractor: its tags would be discarded, so its work and side effects are wasted. */
66+
@Override
67+
public <T> AgentSpan setTagsFrom(T source, TagExtractor<T> extractor) {
68+
return this;
69+
}
70+
71+
/**
72+
* Skips the contributor: its tags would be discarded, so its work and side effects are wasted.
73+
*/
74+
@Override
75+
public AgentSpan setTagsFrom(TagContributor contributor) {
76+
return this;
77+
}
78+
6579
@Override
6680
public AgentSpan setTag(String key, Number value) {
6781
return this;

‎internal-api/src/test/java/datadog/trace/bootstrap/instrumentation/api/AgentSpanSetTagsFromTest.java‎

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,22 @@ void appliesTheContributorToThisSpan() {
5353
void skipsANullContributor() {
5454
assertSame(span, span.setTagsFrom((TagContributor) null));
5555
}
56+
57+
@Test
58+
void skipsTheExtractorOnANoopSpan() {
59+
TagExtractor<String> extractor = (source, target) -> calls.add(source);
60+
61+
assertSame(NoopSpan.INSTANCE, NoopSpan.INSTANCE.setTagsFrom("source", extractor));
62+
63+
assertTrue(calls.isEmpty());
64+
}
65+
66+
@Test
67+
void skipsTheContributorOnANoopSpan() {
68+
TagContributor contributor = calls::add;
69+
70+
assertSame(NoopSpan.INSTANCE, NoopSpan.INSTANCE.setTagsFrom(contributor));
71+
72+
assertTrue(calls.isEmpty());
73+
}
5674
}

0 commit comments

Comments
 (0)