Skip to content

Commit a011b8c

Browse files
authored
Use AutoConfigurationCustomizerProvider APIs (#204)
Use AutoConfigurationCustomizerProvider instead of deprecated APIs that were removed in the Upstream Otel v1.18
1 parent c1263f5 commit a011b8c

File tree

6 files changed

+58
-32
lines changed

6 files changed

+58
-32
lines changed

awsagentprovider/build.gradle.kts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,9 @@ dependencies {
3131
implementation("io.opentelemetry.contrib:opentelemetry-aws-xray")
3232

3333
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-autoconfigure")
34-
34+
testImplementation("io.opentelemetry:opentelemetry-sdk-testing")
35+
testImplementation("io.opentelemetry:opentelemetry-extension-aws")
36+
testImplementation("io.opentelemetry:opentelemetry-extension-trace-propagators")
3537
testImplementation("com.google.guava:guava")
3638

3739
compileOnly("com.google.code.findbugs:jsr305:3.0.2")

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAgentProperties.java renamed to awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsAgentPropertiesCustomizerProvider.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,20 @@
1515

1616
package software.amazon.opentelemetry.javaagent.providers;
1717

18-
import io.opentelemetry.javaagent.extension.config.ConfigPropertySource;
18+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
19+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
1920
import java.util.HashMap;
20-
import java.util.Map;
2121

22-
public class AwsAgentProperties implements ConfigPropertySource {
22+
public class AwsAgentPropertiesCustomizerProvider implements AutoConfigurationCustomizerProvider {
2323
@Override
24-
public Map<String, String> getProperties() {
25-
Map<String, String> properties = new HashMap<>();
26-
properties.put("otel.propagators", "xray,tracecontext,b3,b3multi");
27-
properties.put("otel.instrumentation.aws-sdk.experimental-span-attributes", "true");
28-
return properties;
24+
public void customize(AutoConfigurationCustomizer autoConfiguration) {
25+
autoConfiguration.addPropertiesSupplier(
26+
() ->
27+
new HashMap<String, String>() {
28+
{
29+
put("otel.propagators", "xray,tracecontext,b3,b3multi");
30+
put("otel.instrumentation.aws-sdk.experimental-span-attributes", "true");
31+
}
32+
});
2933
}
3034
}

awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsTracerConfigurer.java renamed to awsagentprovider/src/main/java/software/amazon/opentelemetry/javaagent/providers/AwsTracerCustomizerProvider.java

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,10 @@
1616
package software.amazon.opentelemetry.javaagent.providers;
1717

1818
import io.opentelemetry.contrib.awsxray.AwsXrayIdGenerator;
19-
import io.opentelemetry.sdk.autoconfigure.spi.ConfigProperties;
20-
import io.opentelemetry.sdk.autoconfigure.spi.traces.SdkTracerProviderConfigurer;
21-
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
22-
23-
public class AwsTracerConfigurer implements SdkTracerProviderConfigurer {
19+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizer;
20+
import io.opentelemetry.sdk.autoconfigure.spi.AutoConfigurationCustomizerProvider;
2421

22+
public class AwsTracerCustomizerProvider implements AutoConfigurationCustomizerProvider {
2523
static {
2624
if (System.getProperty("otel.aws.imds.endpointOverride") == null) {
2725
String overrideFromEnv = System.getenv("OTEL_AWS_IMDS_ENDPOINT_OVERRIDE");
@@ -32,8 +30,9 @@ public class AwsTracerConfigurer implements SdkTracerProviderConfigurer {
3230
}
3331

3432
@Override
35-
public void configure(
36-
SdkTracerProviderBuilder sdkTracerProviderBuilder, ConfigProperties config) {
37-
sdkTracerProviderBuilder.setIdGenerator(AwsXrayIdGenerator.getInstance());
33+
public void customize(AutoConfigurationCustomizer autoConfiguration) {
34+
autoConfiguration.addTracerProviderCustomizer(
35+
(tracerProviderBuilder, configProps) ->
36+
tracerProviderBuilder.setIdGenerator(AwsXrayIdGenerator.getInstance()));
3837
}
3938
}

awsagentprovider/src/main/resources/META-INF/services/io.opentelemetry.javaagent.extension.config.ConfigPropertySource

Lines changed: 0 additions & 1 deletion
This file was deleted.
Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#
2-
# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
2+
# Copyright Amazon.com, Inc. or its affiliates.
33
#
44
# Licensed under the Apache License, Version 2.0 (the "License").
55
# You may not use this file except in compliance with the License.
@@ -13,4 +13,5 @@
1313
# permissions and limitations under the License.
1414
#
1515

16-
software.amazon.opentelemetry.javaagent.providers.AwsTracerConfigurer
16+
software.amazon.opentelemetry.javaagent.providers.AwsAgentPropertiesCustomizerProvider
17+
software.amazon.opentelemetry.javaagent.providers.AwsTracerCustomizerProvider

awsagentprovider/src/test/java/software/amazon/opentelemetry/javaagent/providers/AwsTracerConfigurerTest.java

Lines changed: 33 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,27 +15,43 @@
1515

1616
package software.amazon.opentelemetry.javaagent.providers;
1717

18+
import static java.util.Collections.singletonMap;
1819
import static org.assertj.core.api.Assertions.assertThat;
1920

2021
import com.google.common.primitives.Ints;
21-
import io.opentelemetry.api.trace.TracerProvider;
22-
import io.opentelemetry.sdk.trace.SdkTracerProvider;
23-
import io.opentelemetry.sdk.trace.SdkTracerProviderBuilder;
22+
import io.opentelemetry.api.trace.Tracer;
23+
import io.opentelemetry.sdk.OpenTelemetrySdk;
24+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdk;
25+
import io.opentelemetry.sdk.autoconfigure.AutoConfiguredOpenTelemetrySdkBuilder;
26+
import io.opentelemetry.sdk.testing.exporter.InMemorySpanExporter;
27+
import io.opentelemetry.sdk.trace.export.SimpleSpanProcessor;
2428
import io.opentelemetry.sdk.trace.samplers.Sampler;
2529
import java.util.concurrent.TimeUnit;
2630
import org.junit.jupiter.api.RepeatedTest;
2731

2832
class AwsTracerConfigurerTest {
2933

34+
private AutoConfiguredOpenTelemetrySdkBuilder createSdkBuilder() {
35+
InMemorySpanExporter spanExporter = InMemorySpanExporter.create();
36+
return AutoConfiguredOpenTelemetrySdk.builder()
37+
.addTracerProviderCustomizer(
38+
(tracerProviderBuilder, config) -> {
39+
return tracerProviderBuilder.addSpanProcessor(
40+
SimpleSpanProcessor.create(spanExporter));
41+
})
42+
.addPropertiesSupplier(() -> singletonMap("otel.metrics.exporter", "none"))
43+
.addPropertiesSupplier(() -> singletonMap("otel.traces.exporter", "none"))
44+
.addPropertiesSupplier(() -> singletonMap("otel.logs.exporter", "none"))
45+
.setResultAsGlobal(false);
46+
}
3047
// The probability of this passing once without correct IDs is low, 20 times is inconceivable.
3148
@RepeatedTest(20)
3249
void providerGeneratesXrayIds() {
33-
SdkTracerProviderBuilder builder = SdkTracerProvider.builder();
34-
new AwsTracerConfigurer().configure(builder, null);
35-
TracerProvider tracerProvider = builder.build();
50+
OpenTelemetrySdk sdk = createSdkBuilder().build().getOpenTelemetrySdk();
3651

52+
Tracer tracer = sdk.getTracer("test");
3753
int startTimeSecs = (int) TimeUnit.MILLISECONDS.toSeconds(System.currentTimeMillis());
38-
var span = tracerProvider.get("test").spanBuilder("test").startSpan();
54+
var span = tracer.spanBuilder("test").startSpan();
3955
byte[] traceId = span.getSpanContext().getTraceIdBytes();
4056
int epoch = Ints.fromBytes(traceId[0], traceId[1], traceId[2], traceId[3]);
4157
assertThat(epoch).isGreaterThanOrEqualTo(startTimeSecs);
@@ -44,14 +60,19 @@ void providerGeneratesXrayIds() {
4460
// Sanity check that the trace ID ratio sampler works fine with the x-ray generator.
4561
@RepeatedTest(20)
4662
void traceIdRatioSampler() {
47-
SdkTracerProviderBuilder builder =
48-
SdkTracerProvider.builder().setSampler(Sampler.traceIdRatioBased(0.01));
49-
new AwsTracerConfigurer().configure(builder, null);
50-
TracerProvider tracerProvider = builder.build();
63+
OpenTelemetrySdk sdk =
64+
createSdkBuilder()
65+
.addTracerProviderCustomizer(
66+
(tracerProviderBuilder, config) ->
67+
tracerProviderBuilder.setSampler(Sampler.traceIdRatioBased(0.01)))
68+
.build()
69+
.getOpenTelemetrySdk();
70+
5171
int numSpans = 100000;
5272
int numSampled = 0;
73+
Tracer tracer = sdk.getTracer("test");
5374
for (int i = 0; i < numSpans; i++) {
54-
var span = tracerProvider.get("test").spanBuilder("test").startSpan();
75+
var span = tracer.spanBuilder("test").startSpan();
5576
if (span.getSpanContext().getTraceFlags().isSampled()) {
5677
numSampled++;
5778
}

0 commit comments

Comments
 (0)