Skip to content

Commit a73535b

Browse files
committed
OTEL: preserve span.kind if set as attributes in the builder
1 parent f06d59c commit a73535b

File tree

2 files changed

+39
-0
lines changed

2 files changed

+39
-0
lines changed

dd-java-agent/agent-otel/otel-shim/src/main/java/datadog/opentelemetry/shim/trace/OtelSpanBuilder.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,8 @@ public SpanBuilder setAttribute(String key, String value) {
9999
} else if (ANALYTICS_EVENT_SPECIFIC_ATTRIBUTES.equals(key) && value != null) {
100100
this.overriddenAnalyticsSampleRate = parseBoolean(value) ? 1 : 0;
101101
return this;
102+
} else if (SPAN_KIND.equals(key) && value != null) {
103+
this.spanKindSet = true;
102104
}
103105
// Store as object to prevent delegate to remove tag when value is empty
104106
this.delegate.withTag(key, (Object) value);

dd-java-agent/instrumentation/opentelemetry/opentelemetry-0.3/src/test/groovy/OpenTelemetryTest.groovy

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND
2+
import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CLIENT
3+
import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_CONSUMER
4+
import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_INTERNAL
5+
import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_PRODUCER
6+
import static datadog.trace.bootstrap.instrumentation.api.Tags.SPAN_KIND_SERVER
7+
18
import datadog.trace.agent.test.AgentTestRunner
29
import datadog.trace.api.DDSpanId
310
import datadog.trace.api.DDTags
@@ -96,6 +103,36 @@ class OpenTelemetryTest extends AgentTestRunner {
96103
false | true
97104
}
98105

106+
def "test span kinds as attributes"() {
107+
setup:
108+
def result = tracer.spanBuilder("some-name")
109+
.setAttribute("span.kind", otelSpanKind)
110+
.startSpan()
111+
112+
when:
113+
result.end()
114+
115+
then:
116+
assertTraces(1) {
117+
trace(1) {
118+
span {
119+
tags {
120+
defaultTags()
121+
"$SPAN_KIND" "$tagSpanKind"
122+
}
123+
}
124+
}
125+
}
126+
127+
where:
128+
otelSpanKind | tagSpanKind
129+
"internal" | SPAN_KIND_INTERNAL
130+
"server" | SPAN_KIND_SERVER
131+
"client" | SPAN_KIND_CLIENT
132+
"producer" | SPAN_KIND_PRODUCER
133+
"consumer" | SPAN_KIND_CONSUMER
134+
}
135+
99136
def "test span exception"() {
100137
setup:
101138
def builder = tracer.spanBuilder("some name")

0 commit comments

Comments
 (0)