diff --git a/context/src/main/java/io/opentelemetry/context/propagation/TextMapGetter.java b/context/src/main/java/io/opentelemetry/context/propagation/TextMapGetter.java index fe39c4cdb34..cb3a60cada9 100644 --- a/context/src/main/java/io/opentelemetry/context/propagation/TextMapGetter.java +++ b/context/src/main/java/io/opentelemetry/context/propagation/TextMapGetter.java @@ -16,15 +16,23 @@ * * @param carrier of propagation fields, such as an http request. */ +@FunctionalInterface public interface TextMapGetter { /** * Returns all the keys in the given carrier. * + *

The default method returns an empty {@link Iterable}. + * * @param carrier carrier of propagation fields, such as an http request. * @since 0.10.0 + * @deprecated Propagators should use {@link #get(Object, String)} or {@link #getAll(Object, + * String)} with known fields instead. */ - Iterable keys(C carrier); + @Deprecated + default Iterable keys(C carrier) { + return Collections.emptyList(); + } /** * Returns the first value of the given propagation {@code key} or returns {@code null}. diff --git a/context/src/test/java/io/opentelemetry/context/propagation/TextMapGetterTest.java b/context/src/test/java/io/opentelemetry/context/propagation/TextMapGetterTest.java index 851e9b92e8c..59e0f597e4d 100644 --- a/context/src/test/java/io/opentelemetry/context/propagation/TextMapGetterTest.java +++ b/context/src/test/java/io/opentelemetry/context/propagation/TextMapGetterTest.java @@ -45,6 +45,15 @@ public String get(@Nullable Void carrier, String key) { } }; + @Test + @SuppressWarnings("deprecation") // Verifies the default behavior of deprecated keys(). + void canBeImplementedAsLambda() { + TextMapGetter getter = (carrier, key) -> "value"; + + assertThat(getter.get(null, "key")).isEqualTo("value"); + assertThat(getter.keys(null)).isEqualTo(Collections.emptyList()); + } + @Test void extendedTextMapGetterdefaultMethod_returnsEmpty() { Iterator result = nullGet.getAll(null, "key"); diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-context.txt b/docs/apidiffs/current_vs_latest/opentelemetry-context.txt index bcab287d5c7..2b01159a414 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-context.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-context.txt @@ -1,2 +1,7 @@ Comparing source compatibility of opentelemetry-context-1.64.0-SNAPSHOT.jar against opentelemetry-context-1.63.0.jar -No changes. \ No newline at end of file +*** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.context.propagation.TextMapGetter (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + GENERIC TEMPLATES: === C:java.lang.Object + *** MODIFIED METHOD: PUBLIC NON_ABSTRACT (<- ABSTRACT) java.lang.Iterable keys(java.lang.Object) + +++ NEW ANNOTATION: java.lang.Deprecated + +++ NEW ANNOTATION: java.lang.FunctionalInterface diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerPropagator.java b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerPropagator.java index c19a2793fcf..03d6a1a1f10 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerPropagator.java +++ b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/JaegerPropagator.java @@ -244,6 +244,7 @@ private static SpanContext getSpanContextFromHeader( } @Nullable + @SuppressWarnings("deprecation") // Jaeger baggage extraction requires enumerating carrier keys. private static Baggage getBaggageFromHeader(@Nullable C carrier, TextMapGetter getter) { BaggageBuilder builder = null; int entriesAdded = 0; diff --git a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracePropagator.java b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracePropagator.java index 10f3c8d8e8e..769ab2ce4ed 100644 --- a/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracePropagator.java +++ b/extensions/trace-propagators/src/main/java/io/opentelemetry/extension/trace/propagation/OtTracePropagator.java @@ -109,6 +109,7 @@ public void inject(Context context, @Nullable C carrier, TextMapSetter se } @Override + @SuppressWarnings("deprecation") // OT trace baggage extraction requires enumerating carrier keys. public Context extract(Context context, @Nullable C carrier, TextMapGetter getter) { if (context == null) { return Context.root();