Skip to content

Commit 3275dcc

Browse files
authored
Store full instrumentation scope details in OtelTracer wrapper (#10871)
Store full instrumentation scope details in OtelTracer wrapper (needed to support OTLP for traces) Merge branch 'master' into mcculls/record-otel-tracer-scope Fix reactor <-> OTel test Co-authored-by: stuart.mcculloch <stuart.mcculloch@datadoghq.com>
1 parent 470e304 commit 3275dcc

File tree

5 files changed

+37
-13
lines changed

5 files changed

+37
-13
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import static datadog.opentelemetry.shim.trace.OtelConventions.SPAN_KIND_INTERNAL;
44

55
import datadog.trace.bootstrap.instrumentation.api.AgentTracer;
6+
import datadog.trace.bootstrap.otel.common.OtelInstrumentationScope;
67
import io.opentelemetry.api.trace.SpanBuilder;
78
import io.opentelemetry.api.trace.Tracer;
89
import javax.annotation.ParametersAreNonnullByDefault;
@@ -11,9 +12,12 @@
1112
final class OtelTracer implements Tracer {
1213
private static final String INSTRUMENTATION_NAME = otelInstrumentationName();
1314

15+
private final OtelInstrumentationScope instrumentationScope;
16+
1417
private final AgentTracer.TracerAPI tracer;
1518

16-
OtelTracer(@SuppressWarnings("unused") String instrumentationScopeName) {
19+
OtelTracer(OtelInstrumentationScope instrumentationScope) {
20+
this.instrumentationScope = instrumentationScope;
1721
this.tracer = AgentTracer.get();
1822
}
1923

@@ -24,6 +28,11 @@ public SpanBuilder spanBuilder(String spanName) {
2428
return new OtelSpanBuilder(delegate);
2529
}
2630

31+
@Override
32+
public String toString() {
33+
return "OtelTracer{instrumentationScope=" + instrumentationScope + "}";
34+
}
35+
2736
@SuppressWarnings("ConstantConditions")
2837
private static String otelInstrumentationName() {
2938
// is this the bootstrap shim for drop-in support, or the shim for manual instrumentation?

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

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,16 @@
22

33
import io.opentelemetry.api.trace.Tracer;
44
import io.opentelemetry.api.trace.TracerBuilder;
5+
import javax.annotation.Nullable;
56
import javax.annotation.ParametersAreNonnullByDefault;
67

78
@ParametersAreNonnullByDefault
89
final class OtelTracerBuilder implements TracerBuilder {
910
private final OtelTracerProvider tracerProvider;
11+
1012
private final String instrumentationScopeName;
13+
@Nullable private String instrumentationScopeVersion;
14+
@Nullable private String schemaUrl;
1115

1216
OtelTracerBuilder(OtelTracerProvider tracerProvider, String instrumentationScopeName) {
1317
this.tracerProvider = tracerProvider;
@@ -16,18 +20,19 @@ final class OtelTracerBuilder implements TracerBuilder {
1620

1721
@Override
1822
public TracerBuilder setInstrumentationVersion(String instrumentationScopeVersion) {
19-
// Not supported
23+
this.instrumentationScopeVersion = instrumentationScopeVersion;
2024
return this;
2125
}
2226

2327
@Override
2428
public TracerBuilder setSchemaUrl(String schemaUrl) {
25-
// Not supported
29+
this.schemaUrl = schemaUrl;
2630
return this;
2731
}
2832

2933
@Override
3034
public Tracer build() {
31-
return tracerProvider.getTracerShim(instrumentationScopeName);
35+
return tracerProvider.getTracerShim(
36+
instrumentationScopeName, instrumentationScopeVersion, schemaUrl);
3237
}
3338
}
Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package datadog.opentelemetry.shim.trace;
22

3+
import datadog.trace.bootstrap.otel.common.OtelInstrumentationScope;
34
import datadog.trace.util.Strings;
45
import io.opentelemetry.api.trace.Tracer;
56
import io.opentelemetry.api.trace.TracerBuilder;
67
import io.opentelemetry.api.trace.TracerProvider;
78
import java.util.Map;
89
import java.util.concurrent.ConcurrentHashMap;
10+
import javax.annotation.Nullable;
911
import javax.annotation.ParametersAreNonnullByDefault;
1012
import org.slf4j.Logger;
1113
import org.slf4j.LoggerFactory;
@@ -17,31 +19,35 @@ public final class OtelTracerProvider implements TracerProvider {
1719

1820
public static final TracerProvider INSTANCE = new OtelTracerProvider();
1921

20-
/** Tracer shims, indexed by instrumentation scope name. */
21-
private final Map<String, OtelTracer> tracers = new ConcurrentHashMap<>();
22+
/** Tracer shims, indexed by instrumentation scope. */
23+
private final Map<OtelInstrumentationScope, OtelTracer> tracers = new ConcurrentHashMap<>();
2224

2325
@Override
2426
public Tracer get(String instrumentationScopeName) {
25-
return getTracerShim(instrumentationScopeName);
27+
return getTracerShim(instrumentationScopeName, null, null);
2628
}
2729

2830
@Override
29-
public Tracer get(
30-
String instrumentationScopeName,
31-
@SuppressWarnings("unused") String instrumentationScopeVersion) {
32-
return getTracerShim(instrumentationScopeName);
31+
public Tracer get(String instrumentationScopeName, String instrumentationScopeVersion) {
32+
return getTracerShim(instrumentationScopeName, instrumentationScopeVersion, null);
3333
}
3434

3535
@Override
3636
public TracerBuilder tracerBuilder(String instrumentationScopeName) {
3737
return new OtelTracerBuilder(this, instrumentationScopeName);
3838
}
3939

40-
OtelTracer getTracerShim(String instrumentationScopeName) {
40+
OtelTracer getTracerShim(
41+
String instrumentationScopeName,
42+
@Nullable String instrumentationScopeVersion,
43+
@Nullable String schemaUrl) {
4144
if (Strings.isBlank(instrumentationScopeName)) {
4245
LOGGER.debug("Tracer requested without instrumentation scope name.");
4346
instrumentationScopeName = DEFAULT_TRACER_NAME;
4447
}
45-
return tracers.computeIfAbsent(instrumentationScopeName, OtelTracer::new);
48+
return tracers.computeIfAbsent(
49+
new OtelInstrumentationScope(
50+
instrumentationScopeName, instrumentationScopeVersion, schemaUrl),
51+
OtelTracer::new);
4652
}
4753
}

dd-java-agent/instrumentation/opentelemetry/opentelemetry-1.4/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ dependencies {
1818

1919
implementation project(':dd-java-agent:agent-otel:otel-shim')
2020

21+
muzzleBootstrap project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow')
22+
testImplementation project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow')
23+
2124
testImplementation group: 'io.opentelemetry', name: 'opentelemetry-api', version: openTelemetryVersion
2225
testImplementation group: 'org.skyscreamer', name: 'jsonassert', version: '1.5.1'
2326
latestDepTestImplementation group: 'io.opentelemetry', name: 'opentelemetry-api', version: '1+'

dd-java-agent/instrumentation/reactor-core-3.1/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ dependencies {
1717

1818
testImplementation project(':dd-java-agent:instrumentation:datadog:tracing:trace-annotation')
1919
testImplementation project(':dd-java-agent:instrumentation:reactive-streams-1.0')
20+
testImplementation project(path: ':dd-java-agent:agent-otel:otel-bootstrap', configuration: 'shadow')
2021
testImplementation project(':dd-java-agent:instrumentation:opentelemetry:opentelemetry-1.4')
2122
testImplementation project(':dd-java-agent:instrumentation:opentelemetry:opentelemetry-annotations-1.20')
2223
testImplementation project (':dd-java-agent:instrumentation:opentracing:opentracing-0.32')

0 commit comments

Comments
 (0)