From ecdfc391f2c7e82aa10f24569507f84cd6b11df4 Mon Sep 17 00:00:00 2001 From: Anuraag Agrawal Date: Wed, 21 Oct 2020 11:26:54 +0900 Subject: [PATCH] =?UTF-8?q?Add=20a=20ContextValue=20interface=20to=20allow?= =?UTF-8?q?=20Context.withValue(value)=20withou=E2=80=A6=20(#1827)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add a ContextValue interface to allow Context.withValue(value) without a key. * Assertions * Renames --- .../HttpTraceContextInjectBenchmark.java | 3 +-- .../java/io/opentelemetry/trace/Span.java | 8 +++++- .../trace/TracingContextUtils.java | 4 +-- .../trace/propagation/HttpTraceContext.java | 2 +- .../trace/DefaultTracerTest.java | 13 ++++------ .../opentelemetry/trace/SpanBuilderTest.java | 2 +- .../trace/TracingContextUtilsTest.java | 6 ++--- .../propagation/HttpTraceContextTest.java | 2 +- .../io/opentelemetry/context/Context.java | 5 ++++ .../context/ImplicitContextKeyed.java | 25 +++++++++++++++++++ .../PropagatorContextInjectBenchmark.java | 3 +-- .../trace/propagation/AwsXRayPropagator.java | 2 +- .../B3PropagatorExtractorMultipleHeaders.java | 3 +-- .../B3PropagatorExtractorSingleHeader.java | 3 +-- .../trace/propagation/JaegerPropagator.java | 2 +- .../trace/propagation/OtTracerPropagator.java | 2 +- .../propagation/AwsXRayPropagatorTest.java | 2 +- .../trace/propagation/B3PropagatorTest.java | 2 +- .../propagation/JaegerPropagatorTest.java | 2 +- .../propagation/OtTracerPropagatorTest.java | 2 +- .../propagation/TraceMultiPropagatorTest.java | 9 +++---- .../extensions/trace/CurrentSpanUtils.java | 5 ++-- .../trace/CurrentSpanUtilsTest.java | 10 +++++--- .../java/io/opentelemetry/Application.java | 3 +-- .../opentracingshim/Propagation.java | 3 +-- .../opentracingshim/SpanBuilderShim.java | 8 +++--- .../sdk/trace/SpanBuilderSdkTest.java | 10 ++++---- .../HandlerTest.java | 5 +--- 28 files changed, 84 insertions(+), 62 deletions(-) create mode 100644 context/src/main/java/io/opentelemetry/context/ImplicitContextKeyed.java diff --git a/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java b/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java index 2bc8cc69e9..f1deaa36d9 100644 --- a/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java +++ b/api/src/jmh/java/io/opentelemetry/trace/propagation/HttpTraceContextInjectBenchmark.java @@ -11,7 +11,6 @@ import io.opentelemetry.trace.Span; import io.opentelemetry.trace.SpanContext; import io.opentelemetry.trace.TraceFlags; import io.opentelemetry.trace.TraceState; -import io.opentelemetry.trace.TracingContextUtils; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; @@ -75,7 +74,7 @@ public class HttpTraceContextInjectBenchmark { private static List createContexts(List spanContexts) { List contexts = new ArrayList<>(); for (SpanContext context : spanContexts) { - contexts.add(TracingContextUtils.withSpan(Span.wrap(context), Context.root())); + contexts.add(Context.root().with(Span.wrap(context))); } return contexts; } diff --git a/api/src/main/java/io/opentelemetry/trace/Span.java b/api/src/main/java/io/opentelemetry/trace/Span.java index 17a37289c1..95d46724fe 100644 --- a/api/src/main/java/io/opentelemetry/trace/Span.java +++ b/api/src/main/java/io/opentelemetry/trace/Span.java @@ -8,6 +8,7 @@ package io.opentelemetry.trace; import io.opentelemetry.common.AttributeKey; import io.opentelemetry.common.Attributes; import io.opentelemetry.context.Context; +import io.opentelemetry.context.ImplicitContextKeyed; import javax.annotation.Nonnull; import javax.annotation.concurrent.ThreadSafe; @@ -19,7 +20,7 @@ import javax.annotation.concurrent.ThreadSafe; *

{@code Span} must be ended by calling {@link #end()}. */ @ThreadSafe -public interface Span { +public interface Span extends ImplicitContextKeyed { /** * Returns an invalid {@link Span}. An invalid {@link Span} is used when tracing is disabled, @@ -286,6 +287,11 @@ public interface Span { */ boolean isRecording(); + @Override + default Context storeInContext(Context context) { + return TracingContextUtils.withSpan(this, context); + } + /** * {@link Builder} is used to construct {@link Span} instances which define arbitrary scopes of * code that are sampled for distributed tracing as a single atomic unit. diff --git a/api/src/main/java/io/opentelemetry/trace/TracingContextUtils.java b/api/src/main/java/io/opentelemetry/trace/TracingContextUtils.java index 6c65e19636..bfadb8e014 100644 --- a/api/src/main/java/io/opentelemetry/trace/TracingContextUtils.java +++ b/api/src/main/java/io/opentelemetry/trace/TracingContextUtils.java @@ -25,7 +25,7 @@ public final class TracingContextUtils { * @param context the parent {@code Context}. * @return a new context with the given value set. */ - public static Context withSpan(Span span, Context context) { + static Context withSpan(Span span, Context context) { return context.withValues(CONTEXT_SPAN_KEY, span); } @@ -87,7 +87,7 @@ public final class TracingContextUtils { */ @MustBeClosed public static Scope currentContextWith(Span span) { - return withSpan(span, io.opentelemetry.context.Context.current()).makeCurrent(); + return Context.current().with(span).makeCurrent(); } private TracingContextUtils() {} diff --git a/api/src/main/java/io/opentelemetry/trace/propagation/HttpTraceContext.java b/api/src/main/java/io/opentelemetry/trace/propagation/HttpTraceContext.java index 820619cab6..727ce95298 100644 --- a/api/src/main/java/io/opentelemetry/trace/propagation/HttpTraceContext.java +++ b/api/src/main/java/io/opentelemetry/trace/propagation/HttpTraceContext.java @@ -149,7 +149,7 @@ public class HttpTraceContext implements TextMapPropagator { return context; } - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } private static SpanContext extractImpl(C carrier, Getter getter) { diff --git a/api/src/test/java/io/opentelemetry/trace/DefaultTracerTest.java b/api/src/test/java/io/opentelemetry/trace/DefaultTracerTest.java index ddab8c9813..1b016c2da2 100644 --- a/api/src/test/java/io/opentelemetry/trace/DefaultTracerTest.java +++ b/api/src/test/java/io/opentelemetry/trace/DefaultTracerTest.java @@ -43,7 +43,7 @@ class DefaultTracerTest { Span span = defaultTracer .spanBuilder(SPAN_NAME) - .setParent(TracingContextUtils.withSpan(Span.wrap(spanContext), Context.root())) + .setParent(Context.root().with(Span.wrap(spanContext))) .startSpan(); assertThat(span.getContext()).isSameAs(spanContext); } @@ -53,10 +53,7 @@ class DefaultTracerTest { Span parent = Span.wrap(spanContext); Span span = - defaultTracer - .spanBuilder(SPAN_NAME) - .setParent(TracingContextUtils.withSpan(parent, Context.root())) - .startSpan(); + defaultTracer.spanBuilder(SPAN_NAME).setParent(Context.root().with(parent)).startSpan(); assertThat(span.getContext()).isSameAs(spanContext); } @@ -74,7 +71,7 @@ class DefaultTracerTest { @Test void testSpanContextPropagation_fromContext() { - Context context = TracingContextUtils.withSpan(Span.wrap(spanContext), Context.current()); + Context context = Context.current().with(Span.wrap(spanContext)); Span span = defaultTracer.spanBuilder(SPAN_NAME).setParent(context).startSpan(); assertThat(span.getContext()).isSameAs(spanContext); @@ -82,7 +79,7 @@ class DefaultTracerTest { @Test void testSpanContextPropagation_fromContextAfterNoParent() { - Context context = TracingContextUtils.withSpan(Span.wrap(spanContext), Context.current()); + Context context = Context.current().with(Span.wrap(spanContext)); Span span = defaultTracer.spanBuilder(SPAN_NAME).setNoParent().setParent(context).startSpan(); assertThat(span.getContext()).isSameAs(spanContext); @@ -90,7 +87,7 @@ class DefaultTracerTest { @Test void testSpanContextPropagation_fromContextThenNoParent() { - Context context = TracingContextUtils.withSpan(Span.wrap(spanContext), Context.current()); + Context context = Context.current().with(Span.wrap(spanContext)); Span span = defaultTracer.spanBuilder(SPAN_NAME).setParent(context).setNoParent().startSpan(); assertThat(span.getContext()).isEqualTo(SpanContext.getInvalid()); diff --git a/api/src/test/java/io/opentelemetry/trace/SpanBuilderTest.java b/api/src/test/java/io/opentelemetry/trace/SpanBuilderTest.java index f4009302f4..d5aaa5665c 100644 --- a/api/src/test/java/io/opentelemetry/trace/SpanBuilderTest.java +++ b/api/src/test/java/io/opentelemetry/trace/SpanBuilderTest.java @@ -22,7 +22,7 @@ class SpanBuilderTest { void doNotCrash_NoopImplementation() { Span.Builder spanBuilder = tracer.spanBuilder("MySpanName"); spanBuilder.setSpanKind(Kind.SERVER); - spanBuilder.setParent(TracingContextUtils.withSpan(Span.wrap(null), Context.root())); + spanBuilder.setParent(Context.root().with(Span.wrap(null))); spanBuilder.setParent(Context.root()); spanBuilder.setNoParent(); spanBuilder.addLink(Span.getInvalid().getContext()); diff --git a/api/src/test/java/io/opentelemetry/trace/TracingContextUtilsTest.java b/api/src/test/java/io/opentelemetry/trace/TracingContextUtilsTest.java index 107f17d836..eabb4399ce 100644 --- a/api/src/test/java/io/opentelemetry/trace/TracingContextUtilsTest.java +++ b/api/src/test/java/io/opentelemetry/trace/TracingContextUtilsTest.java @@ -21,7 +21,7 @@ class TracingContextUtilsTest { @Test void testGetCurrentSpan_SetSpan() { Span span = Span.wrap(SpanContext.getInvalid()); - try (Scope ignored = TracingContextUtils.withSpan(span, Context.current()).makeCurrent()) { + try (Scope ignored = Context.current().with(span).makeCurrent()) { assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(span); } } @@ -35,7 +35,7 @@ class TracingContextUtilsTest { @Test void testGetSpan_ExplicitContext() { Span span = Span.wrap(SpanContext.getInvalid()); - Context context = TracingContextUtils.withSpan(span, Context.current()); + Context context = Context.current().with(span); assertThat(TracingContextUtils.getSpan(context)).isSameAs(span); } @@ -48,7 +48,7 @@ class TracingContextUtilsTest { @Test void testGetSpanWithoutDefault_ExplicitContext() { Span span = Span.wrap(SpanContext.getInvalid()); - Context context = TracingContextUtils.withSpan(span, Context.current()); + Context context = Context.current().with(span); assertThat(TracingContextUtils.getSpanWithoutDefault(context)).isSameAs(span); } diff --git a/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java b/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java index 137f7a7ec5..d2509706a4 100644 --- a/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java +++ b/api/src/test/java/io/opentelemetry/trace/propagation/HttpTraceContextTest.java @@ -52,7 +52,7 @@ class HttpTraceContextTest { } private static Context withSpanContext(SpanContext spanContext, Context context) { - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } @Test diff --git a/context/src/main/java/io/opentelemetry/context/Context.java b/context/src/main/java/io/opentelemetry/context/Context.java index 3f0c85dd93..36061bbe24 100644 --- a/context/src/main/java/io/opentelemetry/context/Context.java +++ b/context/src/main/java/io/opentelemetry/context/Context.java @@ -155,6 +155,11 @@ public interface Context { return withValues(k1, v1, k2, v2, k3, v3).withValues(k4, v4); } + /** Returns a new {@link Context} with the given {@link ImplicitContextKeyed} set. */ + default Context with(ImplicitContextKeyed value) { + return value.storeInContext(this); + } + /** * Makes this the {@linkplain Context#current() current context} and returns a {@link Scope} which * corresponds to the scope of execution this context is current for. {@link Context#current()} diff --git a/context/src/main/java/io/opentelemetry/context/ImplicitContextKeyed.java b/context/src/main/java/io/opentelemetry/context/ImplicitContextKeyed.java new file mode 100644 index 0000000000..c96f11348b --- /dev/null +++ b/context/src/main/java/io/opentelemetry/context/ImplicitContextKeyed.java @@ -0,0 +1,25 @@ +/* + * Copyright The OpenTelemetry Authors + * SPDX-License-Identifier: Apache-2.0 + */ + +package io.opentelemetry.context; + +/** + * A value that can be stored inside {@link Context}. Types will generally use this interface to + * allow storing themselves in {@link Context} without exposing a {@link ContextKey}. + */ +public interface ImplicitContextKeyed { + + /** + * Returns a new {@link Context} created by setting {@code this} into the provided {@link + * Context}. It is generally recommended to call {@link Context#with(ImplicitContextKeyed)} + * instead of this method. The following are equivalent. + * + *

    + *
  • {@code context.with(myContextValue)} + *
  • {@code myContextValue.storeInContext(context)} + *
+ */ + Context storeInContext(Context context); +} diff --git a/extensions/trace_propagators/src/jmh/java/io/opentelemetry/extensions/trace/propagation/PropagatorContextInjectBenchmark.java b/extensions/trace_propagators/src/jmh/java/io/opentelemetry/extensions/trace/propagation/PropagatorContextInjectBenchmark.java index 7431a43ce5..d53e259e15 100644 --- a/extensions/trace_propagators/src/jmh/java/io/opentelemetry/extensions/trace/propagation/PropagatorContextInjectBenchmark.java +++ b/extensions/trace_propagators/src/jmh/java/io/opentelemetry/extensions/trace/propagation/PropagatorContextInjectBenchmark.java @@ -11,7 +11,6 @@ import io.opentelemetry.trace.Span; import io.opentelemetry.trace.SpanContext; import io.opentelemetry.trace.TraceFlags; import io.opentelemetry.trace.TraceState; -import io.opentelemetry.trace.TracingContextUtils; import java.util.Arrays; import java.util.HashMap; import java.util.List; @@ -62,7 +61,7 @@ public class PropagatorContextInjectBenchmark { @BenchmarkMode(Mode.AverageTime) @Fork(1) public Map measureInject() { - Context context = TracingContextUtils.withSpan(Span.wrap(contextToTest), Context.current()); + Context context = Context.current().with(Span.wrap(contextToTest)); doInject(context, carrier); return carrier; } diff --git a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagator.java b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagator.java index 20c1c71fcf..008828f804 100644 --- a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagator.java +++ b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagator.java @@ -126,7 +126,7 @@ public class AwsXRayPropagator implements TextMapPropagator { return context; } - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } private static SpanContext getSpanContextFromHeader(C carrier, Getter getter) { diff --git a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorMultipleHeaders.java b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorMultipleHeaders.java index 8a83305637..95ffcac5a9 100644 --- a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorMultipleHeaders.java +++ b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorMultipleHeaders.java @@ -13,7 +13,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.trace.Span; import io.opentelemetry.trace.SpanContext; -import io.opentelemetry.trace.TracingContextUtils; import java.util.Objects; import java.util.Optional; import java.util.logging.Logger; @@ -34,7 +33,7 @@ final class B3PropagatorExtractorMultipleHeaders implements B3PropagatorExtracto return Optional.empty(); } - return Optional.of(TracingContextUtils.withSpan(Span.wrap(spanContext), context)); + return Optional.of(context.with(Span.wrap(spanContext))); } private static SpanContext getSpanContextFromMultipleHeaders( diff --git a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorSingleHeader.java b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorSingleHeader.java index 286eeb3ada..ebe016f06a 100644 --- a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorSingleHeader.java +++ b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorExtractorSingleHeader.java @@ -12,7 +12,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.TextMapPropagator; import io.opentelemetry.trace.Span; import io.opentelemetry.trace.SpanContext; -import io.opentelemetry.trace.TracingContextUtils; import java.util.Objects; import java.util.Optional; import java.util.logging.Logger; @@ -33,7 +32,7 @@ final class B3PropagatorExtractorSingleHeader implements B3PropagatorExtractor { return Optional.empty(); } - return Optional.of(TracingContextUtils.withSpan(Span.wrap(spanContext), context)); + return Optional.of(context.with(Span.wrap(spanContext))); } @SuppressWarnings("StringSplitter") diff --git a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagator.java b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagator.java index e5ffaf51a7..714f2cd558 100644 --- a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagator.java +++ b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagator.java @@ -118,7 +118,7 @@ public class JaegerPropagator implements TextMapPropagator { return context; } - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } @SuppressWarnings("StringSplitter") diff --git a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagator.java b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagator.java index 3f53bc6445..44a3c354c1 100644 --- a/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagator.java +++ b/extensions/trace_propagators/src/main/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagator.java @@ -81,7 +81,7 @@ public class OtTracerPropagator implements TextMapPropagator { if (!spanContext.isValid()) { return context; } - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } static SpanContext buildSpanContext(String traceId, String spanId, String sampled) { diff --git a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagatorTest.java b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagatorTest.java index 8f0912cc34..61c96f4918 100644 --- a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagatorTest.java +++ b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/AwsXRayPropagatorTest.java @@ -244,7 +244,7 @@ class AwsXRayPropagatorTest { } private static Context withSpanContext(SpanContext spanContext, Context context) { - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } private static SpanContext getSpanContext(Context context) { diff --git a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorTest.java b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorTest.java index 50f3307134..21cfce13f8 100644 --- a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorTest.java +++ b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/B3PropagatorTest.java @@ -54,7 +54,7 @@ class B3PropagatorTest { } private static Context withSpanContext(SpanContext spanContext, Context context) { - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } @Test diff --git a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagatorTest.java b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagatorTest.java index 2c2e2b88cb..577a69b33d 100644 --- a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagatorTest.java +++ b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/JaegerPropagatorTest.java @@ -64,7 +64,7 @@ class JaegerPropagatorTest { } private static Context withSpanContext(SpanContext spanContext, Context context) { - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } @Test diff --git a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagatorTest.java b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagatorTest.java index 363a0f743d..1115809613 100644 --- a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagatorTest.java +++ b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/OtTracerPropagatorTest.java @@ -40,7 +40,7 @@ class OtTracerPropagatorTest { } private static Context withSpanContext(SpanContext spanContext, Context context) { - return TracingContextUtils.withSpan(Span.wrap(spanContext), context); + return context.with(Span.wrap(spanContext)); } @Test diff --git a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/TraceMultiPropagatorTest.java b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/TraceMultiPropagatorTest.java index fc2b984efd..2fc2f8c5eb 100644 --- a/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/TraceMultiPropagatorTest.java +++ b/extensions/trace_propagators/src/test/java/io/opentelemetry/extensions/trace/propagation/TraceMultiPropagatorTest.java @@ -6,7 +6,6 @@ package io.opentelemetry.extensions.trace.propagation; import static io.opentelemetry.trace.TracingContextUtils.getSpan; -import static io.opentelemetry.trace.TracingContextUtils.withSpan; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.verify; @@ -111,7 +110,7 @@ class TraceMultiPropagatorTest { .build(); Map carrier = new HashMap<>(); - prop.inject(withSpan(SPAN, Context.current()), carrier, Map::put); + prop.inject(Context.current().with(SPAN), carrier, Map::put); assertThat(getSpan(PROPAGATOR1.extract(Context.current(), carrier, Map::get)).getContext()) .isEqualTo(SPAN.getContext()); @@ -141,7 +140,7 @@ class TraceMultiPropagatorTest { .build(); Map carrier = new HashMap<>(); - PROPAGATOR2.inject(withSpan(SPAN, Context.current()), carrier, Map::put); + PROPAGATOR2.inject(Context.current().with(SPAN), carrier, Map::put); assertThat(getSpan(prop.extract(Context.current(), carrier, Map::get)).getContext()) .isEqualTo(SPAN.getContext()); } @@ -151,7 +150,7 @@ class TraceMultiPropagatorTest { TextMapPropagator prop = TraceMultiPropagator.builder().addPropagator(PROPAGATOR1).build(); Map carrier = new HashMap<>(); - PROPAGATOR3.inject(withSpan(SPAN, Context.current()), carrier, Map::put); + PROPAGATOR3.inject(Context.current().with(SPAN), carrier, Map::put); assertThat(prop.extract(Context.current(), carrier, Map::get)).isEqualTo(Context.current()); } @@ -165,7 +164,7 @@ class TraceMultiPropagatorTest { .build(); Map carrier = new HashMap<>(); - PROPAGATOR3.inject(withSpan(SPAN, Context.current()), carrier, Map::put); + PROPAGATOR3.inject(Context.current().with(SPAN), carrier, Map::put); assertThat(getSpan(prop.extract(Context.current(), carrier, Map::get)).getContext()) .isEqualTo(SPAN.getContext()); verify(mockPropagator).fields(); diff --git a/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java b/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java index 80e98f01b4..8e50176bc0 100644 --- a/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java +++ b/extensions/trace_utils/src/main/java/io/opentelemetry/extensions/trace/CurrentSpanUtils.java @@ -9,7 +9,6 @@ import io.opentelemetry.context.Context; import io.opentelemetry.context.Scope; import io.opentelemetry.trace.Span; import io.opentelemetry.trace.StatusCode; -import io.opentelemetry.trace.TracingContextUtils; import java.util.concurrent.Callable; /** Util methods/functionality to interact with the {@link Span} in the {@link Context}. */ @@ -55,7 +54,7 @@ public final class CurrentSpanUtils { @Override public void run() { - try (Scope ignored = TracingContextUtils.withSpan(span, Context.current()).makeCurrent()) { + try (Scope ignored = Context.current().with(span).makeCurrent()) { runnable.run(); } catch (Throwable t) { setErrorStatus(span, t); @@ -86,7 +85,7 @@ public final class CurrentSpanUtils { @Override public V call() throws Exception { - try (Scope ignored = TracingContextUtils.withSpan(span, Context.current()).makeCurrent()) { + try (Scope ignored = Context.current().with(span).makeCurrent()) { return callable.call(); } catch (Exception e) { setErrorStatus(span, e); diff --git a/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java b/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java index 5fefa8b587..3debd6a1f2 100644 --- a/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java +++ b/extensions/trace_utils/src/test/java/io/opentelemetry/extensions/trace/CurrentSpanUtilsTest.java @@ -6,8 +6,10 @@ package io.opentelemetry.extensions.trace; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.never; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.verifyNoInteractions; +import static org.mockito.Mockito.when; import io.opentelemetry.trace.Span; import io.opentelemetry.trace.StatusCode; @@ -18,13 +20,13 @@ import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.mockito.MockitoAnnotations; -/** Unit tests for {@link CurrentSpanUtils}. */ class CurrentSpanUtilsTest { @Mock private Span span; @BeforeEach void setUp() { MockitoAnnotations.initMocks(this); + when(span.storeInContext(any())).thenCallRealMethod(); } // TODO(bdrutu): When update to junit 4.13 use assertThrows instead of this. @@ -60,7 +62,7 @@ class CurrentSpanUtilsTest { assertThat(getCurrentSpan()).isSameAs(span); }; CurrentSpanUtils.withSpan(span, false, runnable).run(); - verifyNoInteractions(span); + verify(span, never()).end(); assertThat(getCurrentSpan().getContext().isValid()).isFalse(); } @@ -120,7 +122,7 @@ class CurrentSpanUtilsTest { return ret; }; assertThat(CurrentSpanUtils.withSpan(span, false, callable).call()).isEqualTo(ret); - verifyNoInteractions(span); + verify(span, never()).end(); assertThat(getCurrentSpan().getContext().isValid()).isFalse(); } diff --git a/integration_tests/tracecontext/src/main/java/io/opentelemetry/Application.java b/integration_tests/tracecontext/src/main/java/io/opentelemetry/Application.java index 8233948c34..8c35967607 100644 --- a/integration_tests/tracecontext/src/main/java/io/opentelemetry/Application.java +++ b/integration_tests/tracecontext/src/main/java/io/opentelemetry/Application.java @@ -9,7 +9,6 @@ import com.google.gson.Gson; import io.opentelemetry.context.Context; import io.opentelemetry.context.propagation.DefaultContextPropagators; import io.opentelemetry.trace.Span; -import io.opentelemetry.trace.TracingContextUtils; import io.opentelemetry.trace.propagation.HttpTraceContext; import java.util.ArrayList; import java.util.Enumeration; @@ -83,7 +82,7 @@ public class Application { .setParent(context) .startSpan(); - Context withSpanContext = TracingContextUtils.withSpan(span, context); + Context withSpanContext = context.with(span); // Make a new request using the builder okhttp3.Request.Builder reqBuilder = new okhttp3.Request.Builder(); diff --git a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java index c2b3ae4cff..bed52774af 100644 --- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java +++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/Propagation.java @@ -22,8 +22,7 @@ final class Propagation extends BaseShimObject { } public void injectTextMap(SpanContextShim contextShim, TextMapInject carrier) { - Context context = - TracingContextUtils.withSpan(Span.wrap(contextShim.getSpanContext()), Context.current()); + Context context = Context.current().with(Span.wrap(contextShim.getSpanContext())); context = BaggageUtils.withBaggage(contextShim.getBaggage(), context); propagators().getTextMapPropagator().inject(context, carrier, TextMapSetter.INSTANCE); diff --git a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java index a22e05417d..a0e2969786 100644 --- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java +++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java @@ -15,7 +15,6 @@ import io.opentelemetry.common.AttributeKey; import io.opentelemetry.context.Context; import io.opentelemetry.trace.Span.Kind; import io.opentelemetry.trace.StatusCode; -import io.opentelemetry.trace.TracingContextUtils; import io.opentracing.Span; import io.opentracing.SpanContext; import io.opentracing.Tracer.SpanBuilder; @@ -183,14 +182,13 @@ final class SpanBuilderShim extends BaseShimObject implements SpanBuilder { if (ignoreActiveSpan && parentSpan == null && parentSpanContext == null) { builder.setNoParent(); } else if (parentSpan != null) { - builder.setParent(TracingContextUtils.withSpan(parentSpan.getSpan(), Context.root())); + builder.setParent(Context.root().with(parentSpan.getSpan())); SpanContextShim contextShim = spanContextTable().get(parentSpan); baggage = contextShim == null ? null : contextShim.getBaggage(); } else if (parentSpanContext != null) { builder.setParent( - TracingContextUtils.withSpan( - io.opentelemetry.trace.Span.wrap(parentSpanContext.getSpanContext()), - Context.root())); + Context.root() + .with(io.opentelemetry.trace.Span.wrap(parentSpanContext.getSpanContext()))); baggage = parentSpanContext.getBaggage(); } diff --git a/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/SpanBuilderSdkTest.java b/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/SpanBuilderSdkTest.java index 603fc37d13..a65c0a730d 100644 --- a/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/SpanBuilderSdkTest.java +++ b/sdk/tracing/src/test/java/io/opentelemetry/sdk/trace/SpanBuilderSdkTest.java @@ -647,7 +647,7 @@ class SpanBuilderSdkTest { void noParent_override() { final Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan(); try { - final Context parentContext = TracingContextUtils.withSpan(parent, Context.current()); + final Context parentContext = Context.current().with(parent); RecordEventsReadableSpan span = (RecordEventsReadableSpan) tracerSdk.spanBuilder(SPAN_NAME).setNoParent().setParent(parentContext).startSpan(); @@ -659,7 +659,7 @@ class SpanBuilderSdkTest { assertThat(span.toSpanData().getParentSpanId()) .isEqualTo(parent.getContext().getSpanIdAsHexString()); - final Context parentContext2 = TracingContextUtils.withSpan(parent, Context.current()); + final Context parentContext2 = Context.current().with(parent); RecordEventsReadableSpan span2 = (RecordEventsReadableSpan) tracerSdk @@ -688,7 +688,7 @@ class SpanBuilderSdkTest { Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan(); try { - final Context parentContext = TracingContextUtils.withSpan(parent, Context.current()); + final Context parentContext = Context.current().with(parent); RecordEventsReadableSpan span = (RecordEventsReadableSpan) tracerSdk.spanBuilder(SPAN_NAME).setNoParent().setParent(parentContext).startSpan(); @@ -710,7 +710,7 @@ class SpanBuilderSdkTest { @Test void parent_fromContext() { final Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan(); - final Context context = TracingContextUtils.withSpan(parent, Context.current()); + final Context context = Context.current().with(parent); try { final RecordEventsReadableSpan span = (RecordEventsReadableSpan) @@ -783,7 +783,7 @@ class SpanBuilderSdkTest { void parent_invalidContext() { Span parent = Span.getInvalid(); - final Context parentContext = TracingContextUtils.withSpan(parent, Context.current()); + final Context parentContext = Context.current().with(parent); RecordEventsReadableSpan span = (RecordEventsReadableSpan) tracerSdk.spanBuilder(SPAN_NAME).setParent(parentContext).startSpan(); diff --git a/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/concurrentcommonrequesthandler/HandlerTest.java b/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/concurrentcommonrequesthandler/HandlerTest.java index 4fc4ffad5b..4703ad4165 100644 --- a/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/concurrentcommonrequesthandler/HandlerTest.java +++ b/sdk_extensions/testbed/src/test/java/io/opentelemetry/sdk/extensions/trace/testbed/concurrentcommonrequesthandler/HandlerTest.java @@ -98,10 +98,7 @@ class HandlerTest { Client client; Span parentSpan = tracer.spanBuilder("parent").startSpan(); try (Scope ignored = TracingContextUtils.currentContextWith(parentSpan)) { - client = - new Client( - new RequestHandler( - tracer, TracingContextUtils.withSpan(parentSpan, Context.current()))); + client = new Client(new RequestHandler(tracer, Context.current().with(parentSpan))); String response = client.send("correct_parent").get(15, TimeUnit.SECONDS); assertThat(response).isEqualTo("correct_parent:response"); } finally {