Remove getCurrentContext and withSpan from Tracer (#1809)

* Remove getCurrentContext and withSpan from Tracer

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>

* Remove old java7 example

Signed-off-by: Bogdan Drutu <bogdandrutu@gmail.com>
This commit is contained in:
Bogdan Drutu 2020-10-15 10:58:41 -07:00 committed by GitHub
parent 2d0f91b538
commit b73a063901
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
42 changed files with 140 additions and 279 deletions

View File

@ -51,7 +51,7 @@ To create a basic span, you only need to specify the name of the span.
The start and end time of the span is automatically set by the OpenTelemetry SDK.
```java
Span span = tracer.spanBuilder("my span").startSpan();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
// your use case
...
} catch (Throwable t) {
@ -87,7 +87,7 @@ The OpenTelemetry API offers also an automated way to propagate the `parentSpan`
```java
void a() {
Span parentSpan = tracer.spanBuilder("a").startSpan();
try(Scope scope = tracer.withSpan(parentSpan)) {
try(Scope scope = TracingContextUtils.currentContextWith(parentSpan)) {
b();
} finally {
parentSpan.end();
@ -96,9 +96,9 @@ void a() {
void b() {
Span childSpan = tracer.spanBuilder("b")
// NOTE: setParent(parentSpan) is not required;
// `tracer.getCurrentSpan()` is automatically added as parent
// `TracingContextUtils.getCurrentSpan()` is automatically added as parent
.startSpan();
try(Scope scope = tracer.withSpan(childSpan)) {
try(Scope scope = TracingContextUtils.currentContextWith(childSpan)) {
// do stuff
} finally {
childSpan.end();
@ -185,7 +185,7 @@ TextMapPropagator.Setter<HttpURLConnection> setter =
URL url = new URL("http://127.0.0.1:8080/resource");
Span outGoing = tracer.spanBuilder("/resource").setSpanKind(Span.Kind.CLIENT).startSpan();
try (Scope scope = tracer.withSpan(outGoing)) {
try (Scope scope = TracingContextUtils.currentContextWith(outGoing)) {
// Semantic Convention.
// (Observe that to set these, Span does not *need* to be the current instance.)
outGoing.setAttribute("http.method", "GET");

View File

@ -34,7 +34,7 @@ public class DefaultTracerBenchmarks {
@Warmup(iterations = 5, time = 1)
public void measureFullSpanLifecycle() {
span = tracer.spanBuilder("span").startSpan();
try (io.opentelemetry.context.Scope ignored = tracer.withSpan(span)) {
try (io.opentelemetry.context.Scope ignored = TracingContextUtils.currentContextWith(span)) {
// no-op
} finally {
span.end();
@ -59,7 +59,7 @@ public class DefaultTracerBenchmarks {
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
public void measureScopeLifecycle() {
try (io.opentelemetry.context.Scope ignored = tracer.withSpan(span)) {
try (io.opentelemetry.context.Scope ignored = TracingContextUtils.currentContextWith(span)) {
// no-op
}
}
@ -71,7 +71,7 @@ public class DefaultTracerBenchmarks {
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
public void measureGetCurrentSpan() {
tracer.getCurrentSpan();
TracingContextUtils.getCurrentSpan();
}
@TearDown(Level.Iteration)

View File

@ -8,7 +8,6 @@ package io.opentelemetry.trace;
import io.opentelemetry.common.AttributeKey;
import io.opentelemetry.common.Attributes;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.internal.Utils;
import java.util.Objects;
import javax.annotation.Nullable;
@ -28,16 +27,6 @@ public final class DefaultTracer implements Tracer {
return INSTANCE;
}
@Override
public Span getCurrentSpan() {
return TracingContextUtils.getCurrentSpan();
}
@Override
public Scope withSpan(Span span) {
return TracingContextUtils.currentContextWith(span);
}
@Override
public Span.Builder spanBuilder(String spanName) {
return NoopSpanBuilder.create(spanName);

View File

@ -299,8 +299,8 @@ public interface Span {
* void doWork {
* // Create a Span as a child of the current Span.
* Span span = tracer.spanBuilder("MyChildSpan").startSpan();
* try (Scope ss = tracer.withSpan(span)) {
* tracer.getCurrentSpan().addEvent("my event");
* try (Scope ss = TracingContextUtils.currentContextWith(span)) {
* TracingContextUtils.getCurrentSpan().addEvent("my event");
* doSomeWork(); // Here the new span is in the current Context, so it can be used
* // implicitly anywhere down the stack.
* } finally {
@ -327,8 +327,8 @@ public interface Span {
* }
*
* public void onExecuteHandler(ServerCallHandler serverCallHandler) {
* try (Scope ws = tracer.withSpan(mySpan)) {
* tracer.getCurrentSpan().addEvent("Start rpc execution.");
* try (Scope ws = TracingContextUtils.currentContextWith(mySpan)) {
* TracingContextUtils.getCurrentSpan().addEvent("Start rpc execution.");
* serverCallHandler.run(); // Here the new span is in the current Context, so it can be
* // used implicitly anywhere down the stack.
* }

View File

@ -5,8 +5,6 @@
package io.opentelemetry.trace;
import com.google.errorprone.annotations.MustBeClosed;
import io.opentelemetry.context.Scope;
import javax.annotation.concurrent.ThreadSafe;
/**
@ -27,10 +25,10 @@ import javax.annotation.concurrent.ThreadSafe;
* private static final Tracer tracer = OpenTelemetry.getTracer();
* void doWork() {
* Span span = tracer.spanBuilder("MyClass.DoWork").startSpan();
* try(Scope ss = tracer.withSpan(span)) {
* tracer.getCurrentSpan().addEvent("Starting the work.");
* try(Scope ss = TracingContextUtils.currentContextWith(span)) {
* TracingContextUtils.getCurrentSpan().addEvent("Starting the work.");
* doWorkInternal();
* tracer.getCurrentSpan().addEvent("Finished working.");
* TracingContextUtils.getCurrentSpan().addEvent("Finished working.");
* } finally {
* span.end();
* }
@ -59,72 +57,6 @@ import javax.annotation.concurrent.ThreadSafe;
*/
@ThreadSafe
public interface Tracer {
/**
* Gets the current Span from the current Context.
*
* <p>To install a {@link Span} to the current Context use {@link #withSpan(Span)}.
*
* <p>startSpan methods do NOT modify the current Context {@code Span}.
*
* @return a default {@code Span} that does nothing and has an invalid {@link SpanContext} if no
* {@code Span} is associated with the current Context, otherwise the current {@code Span}
* from the Context.
*/
Span getCurrentSpan();
/**
* Enters the scope of code where the given {@link Span} is in the current Context, and returns an
* object that represents that scope. The scope is exited when the returned object is closed.
*
* <p>Supports try-with-resource idiom.
*
* <p>Can be called with {@code Span.getPropagated(span.getContext())} to enter a scope of code
* where tracing is stopped.
*
* <p>Example of usage:
*
* <pre>{@code
* private static Tracer tracer = OpenTelemetry.getTracer();
* void doWork() {
* // Create a Span as a child of the current Span.
* Span span = tracer.spanBuilder("my span").startSpan();
* try (Scope ws = tracer.withSpan(span)) {
* tracer.getCurrentSpan().addEvent("my event");
* doSomeOtherWork(); // Here "span" is the current Span.
* }
* span.end();
* }
* }</pre>
*
* <p>Prior to Java SE 7, you can use a finally block to ensure that a resource is closed
* regardless of whether the try statement completes normally or abruptly.
*
* <p>Example of usage prior to Java SE7:
*
* <pre>{@code
* private static Tracer tracer = OpenTelemetry.getTracer();
* void doWork() {
* // Create a Span as a child of the current Span.
* Span span = tracer.spanBuilder("my span").startSpan();
* Scope ws = tracer.withSpan(span);
* try {
* tracer.getCurrentSpan().addEvent("my event");
* doSomeOtherWork(); // Here "span" is the current Span.
* } finally {
* ws.close();
* }
* span.end();
* }
* }</pre>
*
* @param span The {@link Span} to be set to the current Context.
* @return an object that defines a scope where the given {@link Span} will be set to the current
* Context.
* @throws NullPointerException if {@code span} is {@code null}.
*/
@MustBeClosed
Scope withSpan(Span span);
/**
* Returns a {@link Span.Builder} to create and start a new {@link Span}.
*

View File

@ -5,6 +5,7 @@
package io.opentelemetry.trace;
import com.google.errorprone.annotations.MustBeClosed;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.ContextKey;
import io.opentelemetry.context.Scope;
@ -66,9 +67,25 @@ public final class TracingContextUtils {
* Returns a new {@link Scope} encapsulating the provided {@link Span} added to the current {@code
* Context}.
*
* <p>Example of usage:
*
* <pre>{@code
* private static Tracer tracer = OpenTelemetry.getTracer();
* void doWork() {
* // Create a Span as a child of the current Span.
* Span span = tracer.spanBuilder("my span").startSpan();
* try (Scope ws = TracingContextUtils.currentContextWith(span)) {
* TracingContextUtils.getCurrentSpan().addEvent("my event");
* doSomeOtherWork(); // Here "span" is the current Span.
* }
* span.end();
* }
* }</pre>
*
* @param span the {@link Span} to be added to the current {@code Context}.
* @return the {@link Scope} for the updated {@code Context}.
*/
@MustBeClosed
public static Scope currentContextWith(Span span) {
return withSpan(span, io.opentelemetry.context.Context.current()).makeCurrent();
}

View File

@ -246,18 +246,6 @@ class OpenTelemetryTest {
return get(instrumentationName);
}
@Nullable
@Override
public Span getCurrentSpan() {
return null;
}
@Nullable
@Override
public Scope withSpan(Span span) {
return null;
}
@Nullable
@Override
public Span.Builder spanBuilder(String spanName) {

View File

@ -9,7 +9,6 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;
import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import org.junit.jupiter.api.Test;
/** Unit tests for {@link DefaultTracer}. */
@ -29,20 +28,6 @@ class DefaultTracerTest {
TraceFlags.getDefault(),
TraceState.getDefault());
@Test
void defaultGetCurrentSpan() {
assertThat(defaultTracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void getCurrentSpan_WithSpan() {
assertThat(defaultTracer.getCurrentSpan().getContext().isValid()).isFalse();
try (Scope ws = defaultTracer.withSpan(Span.getInvalid())) {
assertThat(defaultTracer.getCurrentSpan().getContext().isValid()).isFalse();
}
assertThat(defaultTracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void spanBuilderWithName_NullName() {
assertThrows(NullPointerException.class, () -> defaultTracer.spanBuilder(null));
@ -53,21 +38,6 @@ class DefaultTracerTest {
assertThat(defaultTracer.spanBuilder(SPAN_NAME).startSpan().getContext().isValid()).isFalse();
}
@Test
void testInProcessContext() {
Span span = defaultTracer.spanBuilder(SPAN_NAME).startSpan();
try (Scope scope = defaultTracer.withSpan(span)) {
assertThat(defaultTracer.getCurrentSpan()).isEqualTo(span);
Span secondSpan = defaultTracer.spanBuilder(SPAN_NAME).startSpan();
try (Scope secondScope = defaultTracer.withSpan(secondSpan)) {
assertThat(defaultTracer.getCurrentSpan()).isEqualTo(secondSpan);
} finally {
assertThat(defaultTracer.getCurrentSpan()).isEqualTo(span);
}
}
assertThat(defaultTracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void testSpanContextPropagationExplicitParent() {
Span span =
@ -99,8 +69,7 @@ class DefaultTracerTest {
@Test
void testSpanContextPropagation_nullContext() {
assertThrows(
NullPointerException.class,
() -> defaultTracer.spanBuilder(SPAN_NAME).setParent((Context) null));
NullPointerException.class, () -> defaultTracer.spanBuilder(SPAN_NAME).setParent(null));
}
@Test
@ -126,22 +95,4 @@ class DefaultTracerTest {
Span span = defaultTracer.spanBuilder(SPAN_NAME).setParent(context).setNoParent().startSpan();
assertThat(span.getContext()).isEqualTo(SpanContext.getInvalid());
}
@Test
void testSpanContextPropagationCurrentSpan() {
Span parent = Span.wrap(spanContext);
try (Scope scope = defaultTracer.withSpan(parent)) {
Span span = defaultTracer.spanBuilder(SPAN_NAME).startSpan();
assertThat(span.getContext()).isSameAs(spanContext);
}
}
@Test
void testSpanContextPropagationCurrentSpanContext() {
Context context = TracingContextUtils.withSpan(Span.wrap(spanContext), Context.current());
try (Scope scope = context.makeCurrent()) {
Span span = defaultTracer.spanBuilder(SPAN_NAME).startSpan();
assertThat(span.getContext()).isSameAs(spanContext);
}
}
}

View File

@ -12,7 +12,6 @@ import io.opentelemetry.context.Scope;
import org.junit.jupiter.api.Test;
class TracingContextUtilsTest {
@Test
void testGetCurrentSpan_Default() {
Span span = TracingContextUtils.getCurrentSpan();
@ -52,4 +51,19 @@ class TracingContextUtilsTest {
Context context = TracingContextUtils.withSpan(span, Context.current());
assertThat(TracingContextUtils.getSpanWithoutDefault(context)).isSameAs(span);
}
@Test
void testInProcessContext() {
Span span = Span.wrap(SpanContext.getInvalid());
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(span);
Span secondSpan = Span.wrap(SpanContext.getInvalid());
try (Scope secondScope = TracingContextUtils.currentContextWith(secondSpan)) {
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(secondSpan);
} finally {
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(span);
}
}
assertThat(TracingContextUtils.getCurrentSpan().getContext().isValid()).isFalse();
}
}

View File

@ -13,7 +13,7 @@ import io.opentelemetry.context.ThreadLocalContextStorage.NoopScope;
* you use this class with a {@code try-with-resources} block:
*
* <pre>{@code
* try (Scope ignored = tracer.withSpan(span)) {
* try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
* ...
* }
* }</pre>

View File

@ -22,7 +22,7 @@ import javax.annotation.concurrent.ThreadSafe;
* <pre>{@code
* private static final Tracer tracer = OpenTelemetry.getTracer();
* void onSendRequest() {
* try (Scope scope = tracer.withSpan(span)) {
* try (Scope scope = TracingContextUtils.currentContextWith(span)) {
* ContextPropagators propagators = OpenTelemetry.getPropagators();
* TextMapPropagator textMapPropagator = propagators.getTextMapPropagator();
*
@ -59,7 +59,7 @@ import javax.annotation.concurrent.ThreadSafe;
* Span span = tracer.spanBuilder("MyRequest")
* .setParent(context)
* .setSpanKind(Span.Kind.SERVER).startSpan();
* try (Scope ss = tracer.withSpan(span)) {
* try (Scope ss = TracingContextUtils.currentContextWith(span)) {
* // Handle request and send response back.
* } finally {
* span.end();

View File

@ -13,7 +13,7 @@ which try-with-resources does not allow. Take this example:
```java
Span span = tracer.spanBuilder("someWork").startSpan();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
// Do things.
} catch (Exception ex) {
span.recordException(ex);

View File

@ -90,7 +90,7 @@ public class HelloWorldClient {
span.setAttribute("net.peer.port", this.serverPort);
// Set the context with the current span
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
HelloRequest request = HelloRequest.newBuilder().setName(name).build();
try {
HelloReply response = blockingStub.sayHello(request);

View File

@ -95,7 +95,7 @@ public class HelloWorldClientStream {
StreamObserver<HelloRequest> requestObserver;
// Set the context with the current span
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
HelloReplyStreamObserver replyObserver = new HelloReplyStreamObserver();
requestObserver = asyncStub.sayHelloStream(replyObserver);
for (String name : names) {
@ -126,14 +126,14 @@ public class HelloWorldClientStream {
@Override
public void onNext(HelloReply value) {
Span span = tracer.getCurrentSpan();
Span span = TracingContextUtils.getCurrentSpan();
span.addEvent("Data received: " + value.getMessage());
logger.info(value.getMessage());
}
@Override
public void onError(Throwable t) {
Span span = tracer.getCurrentSpan();
Span span = TracingContextUtils.getCurrentSpan();
logger.log(Level.WARNING, "RPC failed: {0}", t.getMessage());
span.setStatus(StatusCanonicalCode.ERROR, "gRPC status: " + t.getMessage());
}

View File

@ -55,7 +55,7 @@ public class HttpClient {
// Name convention for the Span is not yet defined.
// See: https://github.com/open-telemetry/opentelemetry-specification/issues/270
Span span = tracer.spanBuilder("/").setSpanKind(Span.Kind.CLIENT).startSpan();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
// TODO provide semantic convention attributes to Span.Builder
span.setAttribute("component", "http");
span.setAttribute("http.method", "GET");

View File

@ -43,7 +43,7 @@ public class HttpServer {
Span span =
tracer.spanBuilder("/").setParent(context).setSpanKind(Span.Kind.SERVER).startSpan();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
// Set the Semantic Convention
span.setAttribute("component", "http");
span.setAttribute("http.method", "GET");

View File

@ -36,7 +36,7 @@ public class DoubleCounterExample {
public static void main(String[] args) {
Span span = tracer.spanBuilder("calculate space").setSpanKind(Kind.INTERNAL).startSpan();
DoubleCounterExample example = new DoubleCounterExample();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
List<String> extensionsToFind = new ArrayList<>();
extensionsToFind.add("dll");
extensionsToFind.add("png");

View File

@ -37,7 +37,7 @@ public class LongCounterExample {
public static void main(String[] args) {
Span span = tracer.spanBuilder("workflow").setSpanKind(Kind.INTERNAL).startSpan();
LongCounterExample example = new LongCounterExample();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
homeDirectoryCounter.add(1); // count root directory
example.findFile("file_to_find.txt", homeDirectory);
} catch (Exception e) {

View File

@ -55,7 +55,7 @@ public class OtlpExporterExample {
for (int i = 0; i < 10; i++) {
Span exampleSpan = tracer.spanBuilder("exampleSpan").startSpan();
try (Scope scope = tracer.withSpan(exampleSpan)) {
try (Scope scope = TracingContextUtils.currentContextWith(exampleSpan)) {
counter.add(1);
exampleSpan.setAttribute("good", "true");
exampleSpan.setAttribute("exampleNumber", i);

View File

@ -5,6 +5,7 @@
package io.opentelemetry.opentracingshim;
import io.opentelemetry.trace.TracingContextUtils;
import io.opentracing.Scope;
import io.opentracing.ScopeManager;
import io.opentracing.Span;
@ -20,7 +21,7 @@ final class ScopeManagerShim extends BaseShimObject implements ScopeManager {
public Span activeSpan() {
// As OpenTracing simply returns null when no active instance is available,
// we need to do map an invalid OpenTelemetry span to null here.
io.opentelemetry.trace.Span span = tracer().getCurrentSpan();
io.opentelemetry.trace.Span span = TracingContextUtils.getCurrentSpan();
if (!span.getContext().isValid()) {
return null;
}
@ -33,7 +34,7 @@ final class ScopeManagerShim extends BaseShimObject implements ScopeManager {
@SuppressWarnings("MustBeClosedChecker")
public Scope activate(Span span) {
io.opentelemetry.trace.Span actualSpan = getActualSpan(span);
return new ScopeShim(tracer().withSpan(actualSpan));
return new ScopeShim(TracingContextUtils.currentContextWith(actualSpan));
}
static io.opentelemetry.trace.Span getActualSpan(Span span) {

View File

@ -15,6 +15,7 @@ import io.opentelemetry.exporters.inmemory.InMemoryTracing;
import io.opentelemetry.opentracingshim.TraceShim;
import io.opentelemetry.sdk.OpenTelemetrySdk;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.TracingContextUtils;
import io.opentracing.Scope;
import io.opentracing.Span;
import io.opentracing.Tracer;
@ -45,7 +46,7 @@ class OpenTelemetryInteroperabilityTest {
} finally {
otSpan.finish();
}
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
assertThat(TracingContextUtils.getCurrentSpan().getContext().isValid()).isFalse();
assertNull(otTracer.activeSpan());
List<SpanData> finishedSpans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
@ -56,13 +57,13 @@ class OpenTelemetryInteroperabilityTest {
@Test
void openTracingContinuesSdkTrace() {
io.opentelemetry.trace.Span otelSpan = tracer.spanBuilder("otel_span").startSpan();
try (io.opentelemetry.context.Scope scope = tracer.withSpan(otelSpan)) {
try (io.opentelemetry.context.Scope scope = TracingContextUtils.currentContextWith(otelSpan)) {
otTracer.buildSpan("ot_span").start().finish();
} finally {
otelSpan.end();
}
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
assertThat(TracingContextUtils.getCurrentSpan().getContext().isValid()).isFalse();
assertNull(otTracer.activeSpan());
List<SpanData> finishedSpans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();

View File

@ -22,6 +22,7 @@ import io.opentelemetry.sdk.metrics.export.MetricExporter;
import io.opentelemetry.sdk.trace.export.BatchSpanProcessor;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.io.IOException;
import java.util.Collection;
import java.util.Collections;
@ -104,7 +105,7 @@ public class OtlpPipelineDriver {
: i < numberOfSpans) {
// for (int i = 0; i < 10000; i++) {
Span exampleSpan = tracer.spanBuilder("exampleSpan").startSpan();
try (Scope scope = tracer.withSpan(exampleSpan)) {
try (Scope scope = TracingContextUtils.currentContextWith(exampleSpan)) {
exampleSpan.setAttribute("exampleNumber", i++);
exampleSpan.setAttribute("attribute0", "attvalue-0");
exampleSpan.setAttribute("attribute1", "attvalue-1");

View File

@ -5,12 +5,10 @@
package io.opentelemetry.sdk.trace;
import io.opentelemetry.context.Scope;
import io.opentelemetry.sdk.common.InstrumentationLibraryInfo;
import io.opentelemetry.trace.DefaultTracer;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
/** {@link TracerSdk} is SDK implementation of {@link Tracer}. */
final class TracerSdk implements Tracer {
@ -22,16 +20,6 @@ final class TracerSdk implements Tracer {
this.instrumentationLibraryInfo = instrumentationLibraryInfo;
}
@Override
public Span getCurrentSpan() {
return TracingContextUtils.getCurrentSpan();
}
@Override
public Scope withSpan(Span span) {
return TracingContextUtils.currentContextWith(span);
}
@Override
public Span.Builder spanBuilder(String spanName) {
if (sharedState.isStopped()) {

View File

@ -613,7 +613,7 @@ class SpanBuilderSdkTest {
@Test
void noParent() {
Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan();
try (Scope ignored = tracerSdk.withSpan(parent)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parent)) {
Span span = tracerSdk.spanBuilder(SPAN_NAME).setNoParent().startSpan();
try {
assertThat(span.getContext().getTraceIdAsHexString())
@ -760,7 +760,7 @@ class SpanBuilderSdkTest {
@Test
void parentCurrentSpan() {
Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan();
try (Scope ignored = tracerSdk.withSpan(parent)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parent)) {
final Context implicitParent = Context.current();
RecordEventsReadableSpan span =
(RecordEventsReadableSpan) tracerSdk.spanBuilder(SPAN_NAME).startSpan();
@ -809,7 +809,7 @@ class SpanBuilderSdkTest {
@Test
void parent_clockIsSame() {
Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan();
try (Scope scope = tracerSdk.withSpan(parent)) {
try (Scope scope = TracingContextUtils.currentContextWith(parent)) {
RecordEventsReadableSpan span =
(RecordEventsReadableSpan) tracerSdk.spanBuilder(SPAN_NAME).startSpan();
@ -822,7 +822,7 @@ class SpanBuilderSdkTest {
@Test
void parentCurrentSpan_clockIsSame() {
Span parent = tracerSdk.spanBuilder(SPAN_NAME).startSpan();
try (Scope ignored = tracerSdk.withSpan(parent)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parent)) {
RecordEventsReadableSpan span =
(RecordEventsReadableSpan) tracerSdk.spanBuilder(SPAN_NAME).startSpan();

View File

@ -49,44 +49,11 @@ class TracerSdkTest {
MockitoAnnotations.initMocks(this);
}
@Test
void defaultGetCurrentSpan() {
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void defaultSpanBuilder() {
assertThat(tracer.spanBuilder(SPAN_NAME)).isInstanceOf(SpanBuilderSdk.class);
}
@Test
void getCurrentSpan() {
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
// Make sure context is detached even if test fails.
try (Scope ignored = TracingContextUtils.withSpan(span, Context.current()).makeCurrent()) {
assertThat(tracer.getCurrentSpan()).isSameAs(span);
}
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void withSpan_NullSpan() {
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
try (Scope ignored = tracer.withSpan(null)) {
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
}
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void getCurrentSpan_WithSpan() {
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
try (Scope ignored = tracer.withSpan(span)) {
assertThat(tracer.getCurrentSpan()).isSameAs(span);
}
assertThat(tracer.getCurrentSpan().getContext().isValid()).isFalse();
}
@Test
void getInstrumentationLibraryInfo() {
assertThat(tracer.getInstrumentationLibraryInfo()).isEqualTo(instrumentationLibraryInfo);
@ -194,7 +161,7 @@ class TracerSdkTest {
@Override
public void update() {
Span span = tracer.spanBuilder("testSpan").startSpan();
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
span.setAttribute("testAttribute", "testValue");
} finally {
span.end();

View File

@ -18,6 +18,7 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanId;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -37,7 +38,7 @@ class ActiveSpanReplacementTest {
void test() {
// Start an isolated task and query for its result in another task/thread
Span span = tracer.spanBuilder("initial").startSpan();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
// Explicitly pass a Span to be finished once a late calculation is done.
submitAnotherTask(span);
}
@ -60,7 +61,7 @@ class ActiveSpanReplacementTest {
assertThat(spans.get(0).getTraceId()).isNotEqualTo(spans.get(1).getTraceId());
assertThat(spans.get(0).getParentSpanId()).isEqualTo(SpanId.getInvalid());
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
private void submitAnotherTask(final Span initialSpan) {
@ -69,11 +70,11 @@ class ActiveSpanReplacementTest {
() -> {
// Create a new Span for this task
Span taskSpan = tracer.spanBuilder("task").startSpan();
try (Scope scope = tracer.withSpan(taskSpan)) {
try (Scope scope = TracingContextUtils.currentContextWith(taskSpan)) {
// Simulate work strictly related to the initial Span
// and finish it.
try (Scope initialScope = tracer.withSpan(initialSpan)) {
try (Scope initialScope = TracingContextUtils.currentContextWith(initialSpan)) {
sleep(50);
} finally {
initialSpan.end();
@ -81,7 +82,7 @@ class ActiveSpanReplacementTest {
// Restore the span for this task and create a subspan
Span subTaskSpan = tracer.spanBuilder("subtask").startSpan();
try (Scope subTaskScope = tracer.withSpan(subTaskSpan)) {
try (Scope subTaskScope = TracingContextUtils.currentContextWith(subTaskSpan)) {
sleep(50);
} finally {
subTaskSpan.end();

View File

@ -10,6 +10,7 @@ import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
@ -44,7 +45,7 @@ final class Actor implements AutoCloseable {
.setParent(parent)
.setSpanKind(Kind.CONSUMER)
.startSpan();
try (Scope ignored = tracer.withSpan(child)) {
try (Scope ignored = TracingContextUtils.currentContextWith(child)) {
phaser.arriveAndAwaitAdvance(); // child tracer started
child.addEvent("received " + message);
phaser.arriveAndAwaitAdvance(); // assert size

View File

@ -15,6 +15,7 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;
@ -48,7 +49,7 @@ class ActorPropagationTest {
phaser.register();
Span parent = tracer.spanBuilder("actorTell").setSpanKind(Kind.PRODUCER).startSpan();
parent.setAttribute("component", "example-actor");
try (Scope ignored = tracer.withSpan(parent)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parent)) {
actor.tell("my message 1");
actor.tell("my message 2");
} finally {
@ -72,7 +73,7 @@ class ActorPropagationTest {
assertThat(TestUtils.getByKind(finished, Span.Kind.CONSUMER)).hasSize(2);
assertThat(TestUtils.getOneByKind(finished, Span.Kind.PRODUCER)).isNotNull();
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
}
@ -85,7 +86,7 @@ class ActorPropagationTest {
Span span = tracer.spanBuilder("actorAsk").setSpanKind(Kind.PRODUCER).startSpan();
span.setAttribute("component", "example-actor");
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
future1 = actor.ask("my message 1");
future2 = actor.ask("my message 2");
} finally {
@ -113,7 +114,7 @@ class ActorPropagationTest {
assertThat(TestUtils.getByKind(finished, Span.Kind.CONSUMER)).hasSize(2);
assertThat(TestUtils.getOneByKind(finished, Span.Kind.PRODUCER)).isNotNull();
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
}
}

View File

@ -11,6 +11,7 @@ import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.concurrent.ArrayBlockingQueue;
final class Client {
@ -29,7 +30,7 @@ final class Client {
Span span = tracer.spanBuilder("send").setSpanKind(Kind.CLIENT).startSpan();
span.setAttribute("component", "example-client");
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
OpenTelemetry.getPropagators()
.getTextMapPropagator()
.inject(Context.current(), message, Message::put);

View File

@ -12,6 +12,7 @@ import io.opentelemetry.context.propagation.TextMapPropagator.Getter;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.concurrent.ArrayBlockingQueue;
import javax.annotation.Nullable;
@ -43,9 +44,9 @@ final class Server extends Thread {
tracer.spanBuilder("receive").setSpanKind(Kind.SERVER).setParent(context).startSpan();
span.setAttribute("component", "example-server");
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
// Simulate work.
tracer.getCurrentSpan().addEvent("DoWork");
TracingContextUtils.getCurrentSpan().addEvent("DoWork");
} finally {
span.end();
}

View File

@ -17,6 +17,7 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
@ -62,6 +63,6 @@ class TestClientServerTest {
assertThat(finished.get(0).getKind()).isEqualTo(Kind.CLIENT);
assertThat(finished.get(1).getKind()).isEqualTo(Kind.SERVER);
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
}

View File

@ -60,14 +60,14 @@ class HandlerTest {
assertThat(finished.get(0).getParentSpanId()).isEqualTo(SpanId.getInvalid());
assertThat(finished.get(1).getParentSpanId()).isEqualTo(SpanId.getInvalid());
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
/** Active parent is not picked up by child. */
@Test
void parent_not_picked_up() throws Exception {
Span parentSpan = tracer.spanBuilder("parent").startSpan();
try (Scope ignored = tracer.withSpan(parentSpan)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parentSpan)) {
String response = client.send("no_parent").get(15, TimeUnit.SECONDS);
assertThat(response).isEqualTo("no_parent:response");
} finally {
@ -97,7 +97,7 @@ class HandlerTest {
void bad_solution_to_set_parent() throws Exception {
Client client;
Span parentSpan = tracer.spanBuilder("parent").startSpan();
try (Scope ignored = tracer.withSpan(parentSpan)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parentSpan)) {
client =
new Client(
new RequestHandler(

View File

@ -19,6 +19,7 @@ import io.opentelemetry.sdk.trace.data.SpanData.Event;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.StatusCanonicalCode;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -38,7 +39,7 @@ public final class ErrorReportingTest {
@Test
void testSimpleError() {
Span span = tracer.spanBuilder("one").startSpan();
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
throw new RuntimeException("Invalid state");
} catch (Exception e) {
span.setStatus(StatusCanonicalCode.ERROR);
@ -46,7 +47,7 @@ public final class ErrorReportingTest {
span.end();
}
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
List<SpanData> spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertThat(spans).hasSize(1);
@ -59,7 +60,7 @@ public final class ErrorReportingTest {
final Span span = tracer.spanBuilder("one").startSpan();
executor.submit(
() -> {
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
throw new RuntimeException("Invalid state");
} catch (Exception exc) {
span.setStatus(StatusCanonicalCode.ERROR);
@ -84,7 +85,7 @@ public final class ErrorReportingTest {
final int maxRetries = 1;
int retries = 0;
Span span = tracer.spanBuilder("one").startSpan();
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
while (retries++ < maxRetries) {
try {
throw new RuntimeException("No url could be fetched");
@ -97,7 +98,7 @@ public final class ErrorReportingTest {
span.setStatus(StatusCanonicalCode.ERROR); // Could not fetch anything.
span.end();
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
List<SpanData> spans = inMemoryTracing.getSpanExporter().getFinishedSpanItems();
assertThat(spans).hasSize(1);
@ -113,7 +114,7 @@ public final class ErrorReportingTest {
@Test
void testInstrumentationLayer() {
Span span = tracer.spanBuilder("one").startSpan();
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
// ScopedRunnable captures the active Span at this time.
executor.submit(
new ScopedRunnable(
@ -121,9 +122,9 @@ public final class ErrorReportingTest {
try {
throw new RuntimeException("Invalid state");
} catch (Exception exc) {
tracer.getCurrentSpan().setStatus(StatusCanonicalCode.ERROR);
TracingContextUtils.getCurrentSpan().setStatus(StatusCanonicalCode.ERROR);
} finally {
tracer.getCurrentSpan().end();
TracingContextUtils.getCurrentSpan().end();
}
},
tracer));
@ -146,13 +147,13 @@ public final class ErrorReportingTest {
private ScopedRunnable(Runnable runnable, Tracer tracer) {
this.runnable = runnable;
this.tracer = tracer;
this.span = tracer.getCurrentSpan();
this.span = TracingContextUtils.getCurrentSpan();
}
@Override
public void run() {
// No error reporting is done, as we are a simple wrapper.
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
runnable.run();
}
}

View File

@ -14,6 +14,7 @@ import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -50,7 +51,7 @@ public final class LateSpanFinishTest {
TestUtils.assertSameTrace(spans);
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
/*
@ -63,9 +64,9 @@ public final class LateSpanFinishTest {
() -> {
/* Alternative to calling activate() is to pass it manually to asChildOf() for each
* created Span. */
try (Scope scope = tracer.withSpan(parentSpan)) {
try (Scope scope = TracingContextUtils.currentContextWith(parentSpan)) {
Span childSpan = tracer.spanBuilder("task1").startSpan();
try (Scope childScope = tracer.withSpan(childSpan)) {
try (Scope childScope = TracingContextUtils.currentContextWith(childSpan)) {
TestUtils.sleep(55);
} finally {
childSpan.end();
@ -75,9 +76,9 @@ public final class LateSpanFinishTest {
executor.submit(
() -> {
try (Scope scope = tracer.withSpan(parentSpan)) {
try (Scope scope = TracingContextUtils.currentContextWith(parentSpan)) {
Span childSpan = tracer.spanBuilder("task2").startSpan();
try (Scope childScope = tracer.withSpan(childSpan)) {
try (Scope childScope = TracingContextUtils.currentContextWith(childSpan)) {
TestUtils.sleep(85);
} finally {
childSpan.end();

View File

@ -13,6 +13,7 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import org.junit.jupiter.api.Test;
@ -33,6 +34,6 @@ class ListenerTest {
assertThat(finished).hasSize(1);
assertThat(finished.get(0).getKind()).isEqualTo(Kind.CLIENT);
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
}

View File

@ -9,6 +9,7 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -30,7 +31,7 @@ class Client {
return executor.submit(
() -> {
Span span = tracer.spanBuilder("subtask").setParent(parent).startSpan();
try (Scope subtaskScope = tracer.withSpan(span)) {
try (Scope subtaskScope = TracingContextUtils.currentContextWith(span)) {
// Simulate work - make sure we finish *after* the parent Span.
parentDoneLatch.await();
} finally {

View File

@ -16,6 +16,7 @@ import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@ -40,7 +41,7 @@ class MultipleCallbacksTest {
Client client = new Client(tracer, parentDoneLatch);
Span span = tracer.spanBuilder("parent").startSpan();
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
client.send("task1");
client.send("task2");
client.send("task3");
@ -63,6 +64,6 @@ class MultipleCallbacksTest {
assertThat(spans.get(i).getParentSpanId()).isEqualTo(parentSpan.getSpanId());
}
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
}

View File

@ -18,6 +18,7 @@ import io.opentelemetry.sdk.trace.TracerSdkProvider;
import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@ -53,24 +54,24 @@ public final class NestedCallbacksTest {
assertThat(attrs.get(stringKey("key" + i))).isEqualTo(Integer.toString(i));
}
assertThat(tracer.getCurrentSpan()).isSameAs(Span.getInvalid());
assertThat(TracingContextUtils.getCurrentSpan()).isSameAs(Span.getInvalid());
}
private void submitCallbacks(final Span span) {
executor.submit(
() -> {
try (Scope ignored = tracer.withSpan(span)) {
try (Scope ignored = TracingContextUtils.currentContextWith(span)) {
span.setAttribute("key1", "1");
executor.submit(
() -> {
try (Scope ignored12 = tracer.withSpan(span)) {
try (Scope ignored12 = TracingContextUtils.currentContextWith(span)) {
span.setAttribute("key2", "2");
executor.submit(
() -> {
try (Scope ignored1 = tracer.withSpan(span)) {
try (Scope ignored1 = TracingContextUtils.currentContextWith(span)) {
span.setAttribute("key3", "3");
} finally {
span.end();

View File

@ -9,6 +9,7 @@ import io.opentelemetry.context.Context;
import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.ArrayList;
import java.util.Collection;
@ -43,7 +44,7 @@ final class Promise<T> {
() -> {
Span childSpan = tracer.spanBuilder("success").setParent(parent).startSpan();
childSpan.setAttribute("component", "success");
try (Scope ignored = tracer.withSpan(childSpan)) {
try (Scope ignored = TracingContextUtils.currentContextWith(childSpan)) {
callback.accept(result);
} finally {
childSpan.end();
@ -60,7 +61,7 @@ final class Promise<T> {
() -> {
Span childSpan = tracer.spanBuilder("error").setParent(parent).startSpan();
childSpan.setAttribute("component", "error");
try (Scope ignored = tracer.withSpan(childSpan)) {
try (Scope ignored = TracingContextUtils.currentContextWith(childSpan)) {
callback.accept(error);
} finally {
childSpan.end();

View File

@ -17,6 +17,7 @@ import io.opentelemetry.sdk.trace.data.SpanData;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.SpanId;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
import java.util.List;
import java.util.concurrent.Phaser;
import java.util.concurrent.atomic.AtomicReference;
@ -53,18 +54,18 @@ class PromisePropagationTest {
Span parentSpan = tracer.spanBuilder("promises").startSpan();
parentSpan.setAttribute("component", "example-promises");
try (Scope ignored = tracer.withSpan(parentSpan)) {
try (Scope ignored = TracingContextUtils.currentContextWith(parentSpan)) {
Promise<String> successPromise = new Promise<>(context, tracer);
successPromise.onSuccess(
s -> {
tracer.getCurrentSpan().addEvent("Promised 1 " + s);
TracingContextUtils.getCurrentSpan().addEvent("Promised 1 " + s);
successResult1.set(s);
phaser.arriveAndAwaitAdvance(); // result set
});
successPromise.onSuccess(
s -> {
tracer.getCurrentSpan().addEvent("Promised 2 " + s);
TracingContextUtils.getCurrentSpan().addEvent("Promised 2 " + s);
successResult2.set(s);
phaser.arriveAndAwaitAdvance(); // result set
});

View File

@ -9,6 +9,7 @@ import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Span.Kind;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
/**
* One instance per Client. 'beforeRequest' and 'afterResponse' are executed in the same thread for
@ -30,13 +31,13 @@ final class RequestHandler {
/** beforeRequest handler....... */
public void beforeRequest(Object request) {
Span span = tracer.spanBuilder(OPERATION_NAME).setSpanKind(Kind.SERVER).startSpan();
tlsScope.set(tracer.withSpan(span));
tlsScope.set(TracingContextUtils.currentContextWith(span));
}
/** afterResponse handler....... */
public void afterResponse(Object response) {
// Finish the Span
tracer.getCurrentSpan().end();
TracingContextUtils.getCurrentSpan().end();
// Deactivate the Span
tlsScope.get().close();

View File

@ -8,24 +8,21 @@ package io.opentelemetry.sdk.extensions.trace.testbed.suspendresumepropagation;
import io.opentelemetry.context.Scope;
import io.opentelemetry.trace.Span;
import io.opentelemetry.trace.Tracer;
import io.opentelemetry.trace.TracingContextUtils;
final class SuspendResume {
private final Tracer tracer;
private final Span span;
public SuspendResume(int id, Tracer tracer) {
// Passed along here for testing. Normally should be referenced via GlobalTracer.get().
this.tracer = tracer;
Span span = tracer.spanBuilder("job " + id).startSpan();
span.setAttribute("component", "suspend-resume");
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
this.span = span;
}
}
public void doPart(String name) {
try (Scope scope = tracer.withSpan(span)) {
try (Scope scope = TracingContextUtils.currentContextWith(span)) {
span.addEvent("part: " + name);
}
}