diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6de58f8f7bf..79cd8508c2b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -20,7 +20,7 @@
#### API Extensions
* DEPRECATION: the `opentelemetry-extension-aws` module containing
- various `AwsXrayPropagator` implementations has been deprecated for removal in next major version.
+ various `AwsXrayPropagator` implementations has been deprecated for removal in next minor version.
A copy of the code will instead be maintained
in [opentelemetry-java-contrib/aws-xray-propagator](https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/aws-xray-propagator)
and published under
diff --git a/README.md b/README.md
index c759f1d6981..479df09e343 100644
--- a/README.md
+++ b/README.md
@@ -232,7 +232,6 @@ dependency as follows, replacing `{{artifact-id}}` with the value from the "Arti
| Component | Description | Artifact ID | Version |
|---------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------------------------|-------------------------------------------------------------|
-| [AWS Extension](./extensions/aws) | AWS Xray propagator (deprecated, moved to [opentelemetry-java-contrib/aws-xray-propagator](https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/aws-xray-propagator)) | `opentelemetry-extension-aws` | 1.20.1 |
| [Kotlin Extension](./extensions/kotlin) | Context extension for coroutines | `opentelemetry-extension-kotlin` | 1.20.1 |
| [Trace Propagators Extension](./extensions/trace-propagators) | Trace propagators, including B3, Jaeger, OT Trace | `opentelemetry-extension-trace-propagators` | 1.20.1 |
| [Incubator Extension](./extensions/incubator) | API incubator, including pass through propagator, and extended tracer | `opentelemetry-extension-incubator` | 1.20.1-alpha |
diff --git a/all/build.gradle.kts b/all/build.gradle.kts
index 8c152a1e72c..0eaf8041b60 100644
--- a/all/build.gradle.kts
+++ b/all/build.gradle.kts
@@ -48,6 +48,7 @@ dependencies {
testImplementation("io.grpc:grpc-protobuf")
testImplementation("io.grpc:grpc-stub")
testImplementation("io.opentelemetry:opentelemetry-extension-annotations")
+ testImplementation("io.opentelemetry:opentelemetry-extension-aws")
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-resources")
testImplementation("io.opentelemetry:opentelemetry-sdk-extension-aws")
diff --git a/all/src/test/java/io/opentelemetry/all/FallbackArtifactsTest.java b/all/src/test/java/io/opentelemetry/all/FallbackArtifactsTest.java
index 78e91f19f8a..eebe961e292 100644
--- a/all/src/test/java/io/opentelemetry/all/FallbackArtifactsTest.java
+++ b/all/src/test/java/io/opentelemetry/all/FallbackArtifactsTest.java
@@ -56,6 +56,12 @@ void sdkExtensionAws() {
classAvailable("io.opentelemetry.sdk.extension.aws.trace.AwsXrayIdGenerator");
}
+ @Test
+ void extensionAws() {
+ classAvailable("io.opentelemetry.extension.aws.AwsConfigurablePropagator");
+ classAvailable("io.opentelemetry.extension.aws.AwsXrayPropagator");
+ }
+
private static void classAvailable(String fqcn) {
Assertions.assertThatCode(() -> Class.forName(fqcn)).doesNotThrowAnyException();
}
diff --git a/bom/build.gradle.kts b/bom/build.gradle.kts
index d921ab49bec..72e53b6b24a 100644
--- a/bom/build.gradle.kts
+++ b/bom/build.gradle.kts
@@ -13,3 +13,4 @@ otelBom.addFallback("opentelemetry-exporter-jaeger-proto", "1.17.0")
otelBom.addFallback("opentelemetry-extension-annotations", "1.18.0")
otelBom.addFallback("opentelemetry-sdk-extension-resources", "1.19.0")
otelBom.addFallback("opentelemetry-sdk-extension-aws", "1.19.0")
+otelBom.addFallback("opentelemetry-extension-aws", "1.20.0")
diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-extension-aws.txt b/docs/apidiffs/current_vs_latest/opentelemetry-extension-aws.txt
deleted file mode 100644
index df26146497b..00000000000
--- a/docs/apidiffs/current_vs_latest/opentelemetry-extension-aws.txt
+++ /dev/null
@@ -1,2 +0,0 @@
-Comparing source compatibility of against
-No changes.
\ No newline at end of file
diff --git a/extensions/aws/README.md b/extensions/aws/README.md
deleted file mode 100644
index 7157e7df5d4..00000000000
--- a/extensions/aws/README.md
+++ /dev/null
@@ -1,12 +0,0 @@
-# OpenTelemetry Extension AWS
-
-[![Javadocs][javadoc-image]][javadoc-url]
-
-> **NOTICE**: This artifact is deprecated and its contents have been moved
-> to [io.opentelemetry.contrib:opentelemetry-aws-xray-propagator](https://github.com/open-telemetry/opentelemetry-java-contrib/tree/main/aws-xray-propagator).
-> Version 1.20.0 will be the last minor version published. However, it will continue to receive
-> patches for security vulnerabilities, and `io.opentelemetry:opentelemetry-bom` will reference the
-> last published version.
-
-[javadoc-image]: https://www.javadoc.io/badge/io.opentelemetry/opentelemetry-extension-aws.svg
-[javadoc-url]: https://www.javadoc.io/doc/io.opentelemetry/opentelemetry-extension-aws
diff --git a/extensions/aws/build.gradle.kts b/extensions/aws/build.gradle.kts
deleted file mode 100644
index 24209c37509..00000000000
--- a/extensions/aws/build.gradle.kts
+++ /dev/null
@@ -1,14 +0,0 @@
-plugins {
- id("otel.java-conventions")
- id("otel.publish-conventions")
-
- id("otel.animalsniffer-conventions")
-}
-
-description = "OpenTelemetry API Extensions for AWS"
-otelJava.moduleName.set("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
deleted file mode 100644
index 1682f16ec3a..00000000000
--- a/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsConfigurablePropagator.java
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * 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.ConfigProperties;
-import io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider;
-
-/**
- * A {@link ConfigurablePropagatorProvider} which allows enabling the {@link AwsXrayPropagator} with
- * the propagator name {@code xray}.
- *
- * @deprecated Moved to io.opentelemetry.contrib:opentelemetry-aws-xray-propagator.
- */
-@Deprecated
-public final class AwsConfigurablePropagator implements ConfigurablePropagatorProvider {
- @Override
- public TextMapPropagator getPropagator(ConfigProperties config) {
- return AwsXrayPropagator.getInstance();
- }
-
- @Override
- public String getName() {
- return "xray";
- }
-}
diff --git a/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java b/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java
deleted file mode 100644
index d483f339462..00000000000
--- a/extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java
+++ /dev/null
@@ -1,333 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.extension.aws;
-
-import io.opentelemetry.api.baggage.Baggage;
-import io.opentelemetry.api.baggage.BaggageBuilder;
-import io.opentelemetry.api.baggage.BaggageEntry;
-import io.opentelemetry.api.internal.StringUtils;
-import io.opentelemetry.api.trace.Span;
-import io.opentelemetry.api.trace.SpanContext;
-import io.opentelemetry.api.trace.SpanId;
-import io.opentelemetry.api.trace.TraceFlags;
-import io.opentelemetry.api.trace.TraceId;
-import io.opentelemetry.api.trace.TraceState;
-import io.opentelemetry.context.Context;
-import io.opentelemetry.context.propagation.TextMapGetter;
-import io.opentelemetry.context.propagation.TextMapPropagator;
-import io.opentelemetry.context.propagation.TextMapSetter;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.function.BiConsumer;
-import java.util.logging.Logger;
-import javax.annotation.Nullable;
-
-/**
- * Implementation of the AWS X-Ray Trace Header propagation protocol. See AWS
- * Tracing header spec
- *
- *
To register the X-Ray propagator together with default propagator when using the SDK:
- *
- *
{@code
- * OpenTelemetrySdk.builder()
- * .setPropagators(
- * ContextPropagators.create(
- * TextMapPropagator.composite(
- * W3CTraceContextPropagator.getInstance(),
- * AWSXrayPropagator.getInstance())))
- * .build();
- * }
- *
- * @deprecated Moved to io.opentelemetry.contrib:opentelemetry-aws-xray-propagator.
- */
-@Deprecated
-public final class AwsXrayPropagator implements TextMapPropagator {
-
- // Visible for testing
- static final String TRACE_HEADER_KEY = "X-Amzn-Trace-Id";
-
- private static final Logger logger = Logger.getLogger(AwsXrayPropagator.class.getName());
-
- private static final char TRACE_HEADER_DELIMITER = ';';
- private static final char KV_DELIMITER = '=';
-
- private static final String TRACE_ID_KEY = "Root";
- private static final int TRACE_ID_LENGTH = 35;
- private static final String TRACE_ID_VERSION = "1";
- private static final char TRACE_ID_DELIMITER = '-';
- private static final int TRACE_ID_DELIMITER_INDEX_1 = 1;
- private static final int TRACE_ID_DELIMITER_INDEX_2 = 10;
- private static final int TRACE_ID_FIRST_PART_LENGTH = 8;
-
- private static final String PARENT_ID_KEY = "Parent";
- private static final int PARENT_ID_LENGTH = 16;
-
- private static final String SAMPLED_FLAG_KEY = "Sampled";
- private static final int SAMPLED_FLAG_LENGTH = 1;
- private static final char IS_SAMPLED = '1';
- private static final char NOT_SAMPLED = '0';
-
- private static final Collection FIELDS = Collections.singletonList(TRACE_HEADER_KEY);
-
- private static final AwsXrayPropagator INSTANCE = new AwsXrayPropagator();
-
- private AwsXrayPropagator() {
- // singleton
- }
-
- public static AwsXrayPropagator getInstance() {
- return INSTANCE;
- }
-
- @Override
- public Collection fields() {
- return FIELDS;
- }
-
- @Override
- public void inject(Context context, @Nullable C carrier, TextMapSetter setter) {
- if (context == null) {
- return;
- }
- if (setter == null) {
- return;
- }
-
- Span span = Span.fromContext(context);
- if (!span.getSpanContext().isValid()) {
- return;
- }
-
- SpanContext spanContext = span.getSpanContext();
-
- String otTraceId = spanContext.getTraceId();
- String xrayTraceId =
- TRACE_ID_VERSION
- + TRACE_ID_DELIMITER
- + otTraceId.substring(0, TRACE_ID_FIRST_PART_LENGTH)
- + TRACE_ID_DELIMITER
- + otTraceId.substring(TRACE_ID_FIRST_PART_LENGTH);
- String parentId = spanContext.getSpanId();
- char samplingFlag = spanContext.isSampled() ? IS_SAMPLED : NOT_SAMPLED;
- // TODO: Add OT trace state to the X-Ray trace header
-
- StringBuilder traceHeader = new StringBuilder();
- traceHeader
- .append(TRACE_ID_KEY)
- .append(KV_DELIMITER)
- .append(xrayTraceId)
- .append(TRACE_HEADER_DELIMITER)
- .append(PARENT_ID_KEY)
- .append(KV_DELIMITER)
- .append(parentId)
- .append(TRACE_HEADER_DELIMITER)
- .append(SAMPLED_FLAG_KEY)
- .append(KV_DELIMITER)
- .append(samplingFlag);
-
- Baggage baggage = Baggage.fromContext(context);
- // Truncate baggage to 256 chars per X-Ray spec.
- baggage.forEach(
- new BiConsumer() {
-
- private int baggageWrittenBytes;
-
- @Override
- public void accept(String key, BaggageEntry entry) {
- if (key.equals(TRACE_ID_KEY)
- || key.equals(PARENT_ID_KEY)
- || key.equals(SAMPLED_FLAG_KEY)) {
- return;
- }
- // Size is key/value pair, excludes delimiter.
- int size = key.length() + entry.getValue().length() + 1;
- if (baggageWrittenBytes + size > 256) {
- return;
- }
- traceHeader
- .append(TRACE_HEADER_DELIMITER)
- .append(key)
- .append(KV_DELIMITER)
- .append(entry.getValue());
- baggageWrittenBytes += size;
- }
- });
-
- setter.set(carrier, TRACE_HEADER_KEY, traceHeader.toString());
- }
-
- @Override
- public Context extract(Context context, @Nullable C carrier, TextMapGetter getter) {
- if (context == null) {
- return Context.root();
- }
- if (getter == null) {
- return context;
- }
-
- return getContextFromHeader(context, carrier, getter);
- }
-
- private static Context getContextFromHeader(
- Context context, @Nullable C carrier, TextMapGetter getter) {
- String traceHeader = getter.get(carrier, TRACE_HEADER_KEY);
- if (traceHeader == null || traceHeader.isEmpty()) {
- return context;
- }
-
- String traceId = TraceId.getInvalid();
- String spanId = SpanId.getInvalid();
- Boolean isSampled = false;
-
- BaggageBuilder baggage = null;
- int baggageReadBytes = 0;
-
- int pos = 0;
- while (pos < traceHeader.length()) {
- int delimiterIndex = traceHeader.indexOf(TRACE_HEADER_DELIMITER, pos);
- String part;
- if (delimiterIndex >= 0) {
- part = traceHeader.substring(pos, delimiterIndex);
- pos = delimiterIndex + 1;
- } else {
- // Last part.
- part = traceHeader.substring(pos);
- pos = traceHeader.length();
- }
- String trimmedPart = part.trim();
- int equalsIndex = trimmedPart.indexOf(KV_DELIMITER);
- if (equalsIndex < 0) {
- logger.fine("Error parsing X-Ray trace header. Invalid key value pair: " + part);
- return context;
- }
-
- String value = trimmedPart.substring(equalsIndex + 1);
-
- if (trimmedPart.startsWith(TRACE_ID_KEY)) {
- traceId = parseTraceId(value);
- } else if (trimmedPart.startsWith(PARENT_ID_KEY)) {
- spanId = parseSpanId(value);
- } else if (trimmedPart.startsWith(SAMPLED_FLAG_KEY)) {
- isSampled = parseTraceFlag(value);
- } else if (baggageReadBytes + trimmedPart.length() <= 256) {
- if (baggage == null) {
- baggage = Baggage.builder();
- }
- baggage.put(trimmedPart.substring(0, equalsIndex), value);
- baggageReadBytes += trimmedPart.length();
- }
- }
- if (isSampled == null) {
- logger.fine(
- "Invalid Sampling flag in X-Ray trace header: '"
- + TRACE_HEADER_KEY
- + "' with value "
- + traceHeader
- + "'.");
- return context;
- }
-
- if (spanId == null || traceId == null) {
- logger.finest("Both traceId and spanId are required to extract a valid span context. ");
- }
-
- SpanContext spanContext =
- SpanContext.createFromRemoteParent(
- StringUtils.padLeft(traceId, TraceId.getLength()),
- spanId,
- isSampled ? TraceFlags.getSampled() : TraceFlags.getDefault(),
- TraceState.getDefault());
- if (spanContext.isValid()) {
- context = context.with(Span.wrap(spanContext));
- }
- if (baggage != null) {
- context = context.with(baggage.build());
- }
- return context;
- }
-
- private static String parseTraceId(String xrayTraceId) {
- return (xrayTraceId.length() == TRACE_ID_LENGTH
- ? parseSpecTraceId(xrayTraceId)
- : parseShortTraceId(xrayTraceId));
- }
-
- private static String parseSpecTraceId(String xrayTraceId) {
-
- // Check version trace id version
- if (!xrayTraceId.startsWith(TRACE_ID_VERSION)) {
- return TraceId.getInvalid();
- }
-
- // Check delimiters
- if (xrayTraceId.charAt(TRACE_ID_DELIMITER_INDEX_1) != TRACE_ID_DELIMITER
- || xrayTraceId.charAt(TRACE_ID_DELIMITER_INDEX_2) != TRACE_ID_DELIMITER) {
- return TraceId.getInvalid();
- }
-
- String epochPart =
- xrayTraceId.substring(TRACE_ID_DELIMITER_INDEX_1 + 1, TRACE_ID_DELIMITER_INDEX_2);
- String uniquePart = xrayTraceId.substring(TRACE_ID_DELIMITER_INDEX_2 + 1, TRACE_ID_LENGTH);
-
- // X-Ray trace id format is 1-{8 digit hex}-{24 digit hex}
- return epochPart + uniquePart;
- }
-
- private static String parseShortTraceId(String xrayTraceId) {
- if (xrayTraceId.length() > TRACE_ID_LENGTH) {
- return TraceId.getInvalid();
- }
-
- // Check version trace id version
- if (!xrayTraceId.startsWith(TRACE_ID_VERSION)) {
- return TraceId.getInvalid();
- }
-
- // Check delimiters
- int firstDelimiter = xrayTraceId.indexOf(TRACE_ID_DELIMITER);
- // we don't allow the epoch part to be missing completely
- int secondDelimiter = xrayTraceId.indexOf(TRACE_ID_DELIMITER, firstDelimiter + 2);
- if (firstDelimiter != TRACE_ID_DELIMITER_INDEX_1
- || secondDelimiter == -1
- || secondDelimiter > TRACE_ID_DELIMITER_INDEX_2) {
- return TraceId.getInvalid();
- }
-
- String epochPart = xrayTraceId.substring(firstDelimiter + 1, secondDelimiter);
- String uniquePart = xrayTraceId.substring(secondDelimiter + 1, secondDelimiter + 25);
-
- // X-Ray trace id format is 1-{at most 8 digit hex}-{24 digit hex}
- // epoch part can have leading 0s truncated
- return epochPart + uniquePart;
- }
-
- private static String parseSpanId(String xrayParentId) {
- if (xrayParentId.length() != PARENT_ID_LENGTH) {
- return SpanId.getInvalid();
- }
-
- return xrayParentId;
- }
-
- @Nullable
- private static Boolean parseTraceFlag(String xraySampledFlag) {
- if (xraySampledFlag.length() != SAMPLED_FLAG_LENGTH) {
- // Returning null as there is no invalid trace flag defined.
- return null;
- }
-
- char flag = xraySampledFlag.charAt(0);
- if (flag == IS_SAMPLED) {
- return true;
- } else if (flag == NOT_SAMPLED) {
- return false;
- } else {
- return null;
- }
- }
-}
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
deleted file mode 100644
index f70fc7eac53..00000000000
--- a/extensions/aws/src/main/java/io/opentelemetry/extension/aws/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/** 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
deleted file mode 100644
index 838deff6656..00000000000
--- a/extensions/aws/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider
+++ /dev/null
@@ -1 +0,0 @@
-io.opentelemetry.extension.aws.AwsConfigurablePropagator
diff --git a/extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java b/extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java
deleted file mode 100644
index 3ad4a957f81..00000000000
--- a/extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java
+++ /dev/null
@@ -1,479 +0,0 @@
-/*
- * Copyright The OpenTelemetry Authors
- * SPDX-License-Identifier: Apache-2.0
- */
-
-package io.opentelemetry.extension.aws;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-import io.opentelemetry.api.baggage.Baggage;
-import io.opentelemetry.api.trace.Span;
-import io.opentelemetry.api.trace.SpanContext;
-import io.opentelemetry.api.trace.TraceFlags;
-import io.opentelemetry.api.trace.TraceState;
-import io.opentelemetry.context.Context;
-import io.opentelemetry.context.propagation.TextMapGetter;
-import io.opentelemetry.context.propagation.TextMapSetter;
-import java.util.Collections;
-import java.util.LinkedHashMap;
-import java.util.Map;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-import javax.annotation.Nullable;
-import org.junit.jupiter.api.Test;
-
-@SuppressWarnings("deprecation") // Moved to contrib
-class AwsXrayPropagatorTest {
-
- private static final String TRACE_ID = "8a3c60f7d188f8fa79d48a391a778fa6";
- private static final String SPAN_ID = "53995c3f42cd8ad8";
-
- private static final TextMapSetter