diff --git a/extensions/aws/build.gradle b/extensions/aws/build.gradle new file mode 100644 index 0000000000..655db0b5bb --- /dev/null +++ b/extensions/aws/build.gradle @@ -0,0 +1,14 @@ +plugins { + id "java-library" + id "maven-publish" + + id "ru.vyarus.animalsniffer" +} + +description = 'OpenTelemetry API Extensions for AWS' +ext.moduleName = "io.opentelemetry.extension.aws" + +dependencies { + api project(':api:all') + compileOnly project(':sdk-extensions:autoconfigure') +} diff --git a/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsConfigurablePropagator.java b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsConfigurablePropagator.java new file mode 100644 index 0000000000..87111fc62a --- /dev/null +++ b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsConfigurablePropagator.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.extension.aws; + +import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider; + +/** + * A {@link ConfigurablePropagatorProvider} which allows enabling the {@link AwsXrayPropagator} with + * the propagator name {@code xray}. + */ +public class AwsConfigurablePropagator implements ConfigurablePropagatorProvider { + @Override + public TextMapPropagator getPropagator() { + return AwsXrayPropagator.getInstance(); + } + + @Override + public String getName() { + return "xray"; + } +} diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagator.java b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java similarity index 99% rename from extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagator.java rename to extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java index 96b5424801..95d27ddcf3 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagator.java +++ b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java @@ -3,7 +3,7 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.extension.trace.propagation; +package io.opentelemetry.extension.aws; import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanContext; diff --git a/extensions/aws/src/main/java/io/opentelemetry/extension/aws/package-info.java b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/package-info.java new file mode 100644 index 0000000000..f70fc7eac5 --- /dev/null +++ b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/package-info.java @@ -0,0 +1,5 @@ +/** OpenTelemetry API extensions for use with AWS. */ +@ParametersAreNonnullByDefault +package io.opentelemetry.extension.aws; + +import javax.annotation.ParametersAreNonnullByDefault; diff --git a/extensions/aws/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider b/extensions/aws/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider new file mode 100644 index 0000000000..838deff665 --- /dev/null +++ b/extensions/aws/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider @@ -0,0 +1 @@ +io.opentelemetry.extension.aws.AwsConfigurablePropagator diff --git a/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagatorTest.java b/extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java similarity index 98% rename from extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagatorTest.java rename to extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java index ea6941d3b2..0c752e8cc5 100644 --- a/extensions/trace-propagators/src/test/java/io/opentelemetry/extension/trace/propagation/AwsXrayPropagatorTest.java +++ b/extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java @@ -3,9 +3,9 @@ * SPDX-License-Identifier: Apache-2.0 */ -package io.opentelemetry.extension.trace.propagation; +package io.opentelemetry.extension.aws; -import static io.opentelemetry.extension.trace.propagation.AwsXrayPropagator.TRACE_HEADER_KEY; +import static io.opentelemetry.extension.aws.AwsXrayPropagator.TRACE_HEADER_KEY; import static org.assertj.core.api.Assertions.assertThat; import io.opentelemetry.api.trace.Span; diff --git a/extensions/trace-propagators/README.md b/extensions/trace-propagators/README.md index b6e8140dcc..5a328451d9 100644 --- a/extensions/trace-propagators/README.md +++ b/extensions/trace-propagators/README.md @@ -15,18 +15,6 @@ OpenTelemetry Java provides first-party support for [Jaeger](https://github.com/jaegertracing/jaeger) propagators. Issues with those propagators should be filed against this repo. -This project also contains 3rd-party propagators for other formats. These propagators are here for -convenience and are not officially supported by the OpenTelemetry Java maintainers. - -Issues/support for these propagators is only provided as a minimal "best effort", and critical -bugs should be filed with the respective vendors themselves. - -* AWS X-Ray (file an issue here and mention @anuraaga) -* LightStep OpenTracing (file an issue here and mention @carlosalberto) - -Extension providers that do not receive adequate support/maintenance by their respective vendors -will become candidates for future removal. - --- #### Running micro-benchmarks From the root of the repo run `./gradlew clean :opentelemetry-extension-trace-propagators:jmh` diff --git a/extensions/trace-propagators/build.gradle b/extensions/trace-propagators/build.gradle index 48494a306e..de94732a45 100644 --- a/extensions/trace-propagators/build.gradle +++ b/extensions/trace-propagators/build.gradle @@ -14,4 +14,6 @@ dependencies { testImplementation "io.jaegertracing:jaeger-client", "com.google.guava:guava" + + jmhImplementation project(":extensions:aws") } diff --git a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java index 0a489a4314..8233c52dd3 100644 --- a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java +++ b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextExtractBenchmark.java @@ -8,6 +8,7 @@ package io.opentelemetry.extension.trace.propagation; import io.opentelemetry.api.trace.Span; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.extension.aws.AwsXrayPropagator; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; @@ -271,19 +272,19 @@ public class PropagatorContextExtractBenchmark { private static final List> traceHeaders = Arrays.asList( Collections.singletonMap( - AwsXrayPropagator.TRACE_HEADER_KEY, + "X-Amzn-Trace-Id", "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1"), Collections.singletonMap( - AwsXrayPropagator.TRACE_HEADER_KEY, + "X-Amzn-Trace-Id", "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"), Collections.singletonMap( - AwsXrayPropagator.TRACE_HEADER_KEY, + "X-Amzn-Trace-Id", "Parent=53995c3f42cd8ad8;Sampled=1;Root=1-8a3c60f7-d188f8fa79d48a391a778fa6"), Collections.singletonMap( - AwsXrayPropagator.TRACE_HEADER_KEY, + "X-Amzn-Trace-Id", "Root=1-57ff426a-80c11c39b0c928905eb0828d;Parent=53995c3f42cd8ad8;Sampled=1"), Collections.singletonMap( - AwsXrayPropagator.TRACE_HEADER_KEY, + "X-Amzn-Trace-Id", "Root=1-57ff426a-80c11c39b0c928905eb0828d;Parent=12345c3f42cd8ad8;Sampled=0")); private final TextMapPropagator.Getter> getter = diff --git a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java index 0a27f3b2e0..83a43824ac 100644 --- a/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java +++ b/extensions/trace-propagators/src/jmh/java/io/opentelemetry/extension/trace/propagation/PropagatorContextInjectBenchmark.java @@ -11,6 +11,7 @@ import io.opentelemetry.api.trace.TraceFlags; import io.opentelemetry.api.trace.TraceState; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapPropagator; +import io.opentelemetry.extension.aws.AwsXrayPropagator; import java.util.Arrays; import java.util.HashMap; import java.util.List; diff --git a/sdk-extensions/autoconfigure/build.gradle b/sdk-extensions/autoconfigure/build.gradle index 967e25e448..6f27e49432 100644 --- a/sdk-extensions/autoconfigure/build.gradle +++ b/sdk-extensions/autoconfigure/build.gradle @@ -38,6 +38,7 @@ dependencies { testRuntimeOnly 'io.grpc:grpc-netty-shaded' testRuntimeOnly "org.slf4j:slf4j-simple" + testFullConfigImplementation project(':extensions:aws') testFullConfigImplementation project(':extensions:trace-propagators') testFullConfigImplementation project(':exporters:jaeger') testFullConfigImplementation project(':exporters:logging') diff --git a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/PropagatorConfiguration.java b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/PropagatorConfiguration.java index ada356398b..d8b414d997 100644 --- a/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/PropagatorConfiguration.java +++ b/sdk-extensions/autoconfigure/src/main/java/io/opentelemetry/sdk/autoconfigure/PropagatorConfiguration.java @@ -9,7 +9,6 @@ import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; import io.opentelemetry.context.propagation.ContextPropagators; import io.opentelemetry.context.propagation.TextMapPropagator; -import io.opentelemetry.extension.trace.propagation.AwsXrayPropagator; import io.opentelemetry.extension.trace.propagation.B3Propagator; import io.opentelemetry.extension.trace.propagation.JaegerPropagator; import io.opentelemetry.extension.trace.propagation.OtTracePropagator; @@ -65,8 +64,6 @@ final class PropagatorConfiguration { // NB: https://github.com/open-telemetry/opentelemetry-specification/pull/1406 case "ottracer": return OtTracePropagator.getInstance(); - case "xray": - return AwsXrayPropagator.getInstance(); default: TextMapPropagator spiPropagator = spiPropagators.get(name); if (spiPropagator != null) { diff --git a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java index c9ed96578e..5e5a83aeec 100644 --- a/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java +++ b/sdk-extensions/autoconfigure/src/testFullConfig/java/io/opentelemetry/sdk/autoconfigure/FullConfigTest.java @@ -17,7 +17,7 @@ import io.grpc.stub.StreamObserver; import io.opentelemetry.api.GlobalOpenTelemetry; import io.opentelemetry.api.baggage.propagation.W3CBaggagePropagator; import io.opentelemetry.api.trace.propagation.W3CTraceContextPropagator; -import io.opentelemetry.extension.trace.propagation.AwsXrayPropagator; +import io.opentelemetry.extension.aws.AwsXrayPropagator; import io.opentelemetry.extension.trace.propagation.B3Propagator; import io.opentelemetry.extension.trace.propagation.JaegerPropagator; import io.opentelemetry.extension.trace.propagation.OtTracePropagator; diff --git a/settings.gradle b/settings.gradle index 18a9250ca4..9b1b3595b7 100644 --- a/settings.gradle +++ b/settings.gradle @@ -44,6 +44,7 @@ include ":all", ":bom-alpha", ":dependencyManagement", ":extensions:annotations", + ":extensions:aws", ":extensions:kotlin", ":extensions:trace-propagators", ":exporters:jaeger",