From a4aaa9996e08b1cf6a0588e75e5f498a2fec5714 Mon Sep 17 00:00:00 2001 From: jack-berg <34418638+jack-berg@users.noreply.github.com> Date: Thu, 17 Nov 2022 09:40:29 -0600 Subject: [PATCH] Stop publishing opentelemetry-extension-aws artifact (#4945) --- CHANGELOG.md | 2 +- README.md | 1 - all/build.gradle.kts | 1 + .../all/FallbackArtifactsTest.java | 6 + bom/build.gradle.kts | 1 + .../opentelemetry-extension-aws.txt | 2 - extensions/aws/README.md | 12 - extensions/aws/build.gradle.kts | 14 - .../aws/AwsConfigurablePropagator.java | 30 -- .../extension/aws/AwsXrayPropagator.java | 333 ------------ .../extension/aws/package-info.java | 5 - ...nfigure.spi.ConfigurablePropagatorProvider | 1 - .../extension/aws/AwsXrayPropagatorTest.java | 479 ------------------ settings.gradle.kts | 1 - 14 files changed, 9 insertions(+), 879 deletions(-) delete mode 100644 docs/apidiffs/current_vs_latest/opentelemetry-extension-aws.txt delete mode 100644 extensions/aws/README.md delete mode 100644 extensions/aws/build.gradle.kts delete mode 100644 extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsConfigurablePropagator.java delete mode 100644 extensions/aws/src/main/java/io/opentelemetry/extension/aws/AwsXrayPropagator.java delete mode 100644 extensions/aws/src/main/java/io/opentelemetry/extension/aws/package-info.java delete mode 100644 extensions/aws/src/main/resources/META-INF/services/io.opentelemetry.sdk.autoconfigure.spi.ConfigurablePropagatorProvider delete mode 100644 extensions/aws/src/test/java/io/opentelemetry/extension/aws/AwsXrayPropagatorTest.java 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> setter = Map::put; - private static final TextMapGetter> getter = - new TextMapGetter>() { - @Override - public Iterable keys(Map carrier) { - return carrier.keySet(); - } - - @Nullable - @Override - public String get(Map carrier, String key) { - return carrier.get(key); - } - }; - private final AwsXrayPropagator xrayPropagator = AwsXrayPropagator.getInstance(); - - @Test - void inject_SampledContext() { - Map carrier = new LinkedHashMap<>(); - xrayPropagator.inject( - withSpanContext( - SpanContext.create(TRACE_ID, SPAN_ID, TraceFlags.getSampled(), TraceState.getDefault()), - Context.current()), - carrier, - setter); - - assertThat(carrier) - .containsEntry( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1"); - } - - @Test - void inject_NotSampledContext() { - Map carrier = new LinkedHashMap<>(); - xrayPropagator.inject( - withSpanContext( - SpanContext.create(TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()), - Context.current()), - carrier, - setter); - - assertThat(carrier) - .containsEntry( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"); - } - - @Test - void inject_WithBaggage() { - Map carrier = new LinkedHashMap<>(); - xrayPropagator.inject( - withSpanContext( - SpanContext.create( - TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()), - Context.current()) - .with( - Baggage.builder() - .put("cat", "meow") - .put("dog", "bark") - .put("Root", "ignored") - .put("Parent", "ignored") - .put("Sampled", "ignored") - .build()), - carrier, - setter); - - assertThat(carrier) - .containsEntry( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0;" - + "cat=meow;dog=bark"); - } - - @Test - void inject_WithBaggage_LimitTruncates() { - Map carrier = new LinkedHashMap<>(); - // Limit is 256 characters for all baggage. We add a 254-character key/value pair and a - // 3 character key value pair. - String key1 = Stream.generate(() -> "a").limit(252).collect(Collectors.joining()); - String value1 = "a"; // 252 + 1 (=) + 1 = 254 - - String key2 = "b"; - String value2 = "b"; // 1 + 1 (=) + 1 = 3 - - Baggage baggage = Baggage.builder().put(key1, value1).put(key2, value2).build(); - - xrayPropagator.inject( - withSpanContext( - SpanContext.create( - TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()), - Context.current()) - .with(baggage), - carrier, - setter); - - assertThat(carrier) - .containsEntry( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0;" - + key1 - + '=' - + value1); - } - - @Test - void inject_WithTraceState() { - Map carrier = new LinkedHashMap<>(); - xrayPropagator.inject( - withSpanContext( - SpanContext.create( - TRACE_ID, - SPAN_ID, - TraceFlags.getDefault(), - TraceState.builder().put("foo", "bar").build()), - Context.current()), - carrier, - setter); - - // TODO: assert trace state when the propagator supports it, for general key/value pairs we are - // mapping with baggage. - assertThat(carrier) - .containsEntry( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"); - } - - @Test - void inject_nullContext() { - Map carrier = new LinkedHashMap<>(); - xrayPropagator.inject(null, carrier, setter); - assertThat(carrier).isEmpty(); - } - - @Test - void inject_nullSetter() { - Map carrier = new LinkedHashMap<>(); - Context context = - withSpanContext( - SpanContext.create(TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()), - Context.current()); - xrayPropagator.inject(context, carrier, null); - assertThat(carrier).isEmpty(); - } - - @Test - void extract_Nothing() { - // Context remains untouched. - assertThat( - xrayPropagator.extract( - Context.current(), Collections.emptyMap(), getter)) - .isSameAs(Context.current()); - } - - @Test - void extract_SampledContext() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isEqualTo( - SpanContext.createFromRemoteParent( - TRACE_ID, SPAN_ID, TraceFlags.getSampled(), TraceState.getDefault())); - } - - @Test - void extract_NotSampledContext() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isEqualTo( - SpanContext.createFromRemoteParent( - TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault())); - } - - @Test - void extract_DifferentPartOrder() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Parent=53995c3f42cd8ad8;Sampled=1;Root=1-8a3c60f7-d188f8fa79d48a391a778fa6"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isEqualTo( - SpanContext.createFromRemoteParent( - TRACE_ID, SPAN_ID, TraceFlags.getSampled(), TraceState.getDefault())); - } - - @Test - void extract_AdditionalFields() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1;Foo=Bar"); - - Context context = xrayPropagator.extract(Context.current(), carrier, getter); - assertThat(getSpanContext(context)) - .isEqualTo( - SpanContext.createFromRemoteParent( - TRACE_ID, SPAN_ID, TraceFlags.getSampled(), TraceState.getDefault())); - assertThat(Baggage.fromContext(context).getEntryValue("Foo")).isEqualTo("Bar"); - } - - @Test - void extract_Baggage_LimitTruncates() { - // Limit is 256 characters for all baggage. We add a 254-character key/value pair and a - // 3 character key value pair. - String key1 = Stream.generate(() -> "a").limit(252).collect(Collectors.joining()); - String value1 = "a"; // 252 + 1 (=) + 1 = 254 - - String key2 = "b"; - String value2 = "b"; // 1 + 1 (=) + 1 = 3 - - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1;" - + key1 - + '=' - + value1 - + ';' - + key2 - + '=' - + value2); - - Context context = xrayPropagator.extract(Context.current(), carrier, getter); - assertThat(getSpanContext(context)) - .isEqualTo( - SpanContext.createFromRemoteParent( - TRACE_ID, SPAN_ID, TraceFlags.getSampled(), TraceState.getDefault())); - assertThat(Baggage.fromContext(context).getEntryValue(key1)).isEqualTo(value1); - assertThat(Baggage.fromContext(context).getEntryValue(key2)).isNull(); - } - - @Test - void extract_EmptyHeaderValue() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put(AwsXrayPropagator.TRACE_HEADER_KEY, ""); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidTraceId() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=abcdefghijklmnopabcdefghijklmnop;Parent=53995c3f42cd8ad8;Sampled=0"); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidTraceId_Size() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa600;Parent=53995c3f42cd8ad8;Sampled=0"); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidSpanId() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=abcdefghijklmnop;Sampled=0"); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidSpanId_Size() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad800;Sampled=0"); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidFlags() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled="); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidFlags_Size() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=10220"); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_InvalidFlags_NonNumeric() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f7-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=a"); - - verifyInvalidBehavior(invalidHeaders); - } - - @Test - void extract_Invalid_NoSpanId() { - Map invalidHeaders = new LinkedHashMap<>(1); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, "Root=1-622422bf-59625fe25708d4660735d8ef"); - - verifyInvalidBehavior(invalidHeaders); - } - - private void verifyInvalidBehavior(Map invalidHeaders) { - Context input = Context.current(); - Context result = xrayPropagator.extract(input, invalidHeaders, getter); - assertThat(result).isSameAs(input); - assertThat(getSpanContext(result)).isSameAs(SpanContext.getInvalid()); - } - - @Test - void extract_nullContext() { - assertThat(xrayPropagator.extract(null, Collections.emptyMap(), getter)) - .isSameAs(Context.root()); - } - - @Test - void extract_nullGetter() { - Context context = - withSpanContext( - SpanContext.create(TRACE_ID, SPAN_ID, TraceFlags.getDefault(), TraceState.getDefault()), - Context.current()); - assertThat(xrayPropagator.extract(context, Collections.emptyMap(), null)).isSameAs(context); - } - - @Test - void extract_EpochPart_ZeroedSingleDigit() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-0-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1;Foo=Bar"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isEqualTo( - SpanContext.createFromRemoteParent( - "00000000d188f8fa79d48a391a778fa6", - SPAN_ID, - TraceFlags.getSampled(), - TraceState.getDefault())); - } - - @Test - void extract_EpochPart_TwoChars() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-1a-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1;Foo=Bar"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isEqualTo( - SpanContext.createFromRemoteParent( - "0000001ad188f8fa79d48a391a778fa6", - SPAN_ID, - TraceFlags.getSampled(), - TraceState.getDefault())); - } - - @Test - void extract_EpochPart_Zeroed() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-00000000-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1;Foo=Bar"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isEqualTo( - SpanContext.createFromRemoteParent( - "00000000d188f8fa79d48a391a778fa6", - SPAN_ID, - TraceFlags.getSampled(), - TraceState.getDefault())); - } - - @Test - void extract_InvalidTraceId_EpochPart_TooLong() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-8a3c60f711-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), invalidHeaders, getter))) - .isSameAs(SpanContext.getInvalid()); - } - - @Test - void extract_InvalidTraceId_EpochPart_Empty() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1--d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), invalidHeaders, getter))) - .isSameAs(SpanContext.getInvalid()); - } - - @Test - void extract_InvalidTraceId_EpochPart_Missing() { - Map invalidHeaders = new LinkedHashMap<>(); - invalidHeaders.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=1-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=0"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), invalidHeaders, getter))) - .isSameAs(SpanContext.getInvalid()); - } - - @Test - void extract_InvalidTraceId_WrongVersion() { - Map carrier = new LinkedHashMap<>(); - carrier.put( - AwsXrayPropagator.TRACE_HEADER_KEY, - "Root=2-1a2a3a4a-d188f8fa79d48a391a778fa6;Parent=53995c3f42cd8ad8;Sampled=1;Foo=Bar"); - - assertThat(getSpanContext(xrayPropagator.extract(Context.current(), carrier, getter))) - .isSameAs(SpanContext.getInvalid()); - } - - private static Context withSpanContext(SpanContext spanContext, Context context) { - return context.with(Span.wrap(spanContext)); - } - - private static SpanContext getSpanContext(Context context) { - return Span.fromContext(context).getSpanContext(); - } -} diff --git a/settings.gradle.kts b/settings.gradle.kts index bdbc66e3bd4..ce5563a6007 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -30,7 +30,6 @@ include(":bom-alpha") include(":context") include(":dependencyManagement") include(":extensions:incubator") -include(":extensions:aws") include(":extensions:kotlin") include(":extensions:trace-propagators") include(":exporters:common")