From 568bdb41be45e4f85f8a243c5e4c3c37cd08b564 Mon Sep 17 00:00:00 2001 From: Matt Spataro Date: Tue, 29 Nov 2022 13:31:31 -0700 Subject: [PATCH] handle noop (#4968) Co-authored-by: Jack Berg --- dependencyManagement/build.gradle.kts | 1 + opentracing-shim/build.gradle.kts | 1 + .../opentracingshim/SpanBuilderShim.java | 5 ++--- .../opentracingshim/SpanBuilderShimTest.java | 15 +++++++++++++++ 4 files changed, 19 insertions(+), 3 deletions(-) diff --git a/dependencyManagement/build.gradle.kts b/dependencyManagement/build.gradle.kts index e8f36e59e4a..26a85b367ca 100644 --- a/dependencyManagement/build.gradle.kts +++ b/dependencyManagement/build.gradle.kts @@ -90,6 +90,7 @@ val DEPENDENCIES = listOf( "io.jaegertracing:jaeger-client:1.8.1", "io.opentelemetry.proto:opentelemetry-proto:0.19.0-alpha", "io.opentracing:opentracing-api:0.33.0", + "io.opentracing:opentracing-noop:0.33.0", "junit:junit:4.13.2", "nl.jqno.equalsverifier:equalsverifier:3.11.1", "org.assertj:assertj-core:3.23.1", diff --git a/opentracing-shim/build.gradle.kts b/opentracing-shim/build.gradle.kts index 98129994fbc..56dac7d0ce8 100644 --- a/opentracing-shim/build.gradle.kts +++ b/opentracing-shim/build.gradle.kts @@ -11,6 +11,7 @@ dependencies { api("io.opentracing:opentracing-api") implementation(project(":semconv")) + implementation("io.opentracing:opentracing-noop:0.33.0") annotationProcessor("com.google.auto.value:auto-value") 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 2551e83d7d8..64cf4f0a19d 100644 --- a/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java +++ b/opentracing-shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java @@ -23,6 +23,7 @@ import io.opentracing.Span; import io.opentracing.SpanContext; import io.opentracing.Tracer.SpanBuilder; +import io.opentracing.noop.NoopSpan; import io.opentracing.tag.Tag; import io.opentracing.tag.Tags; import java.util.ArrayList; @@ -63,11 +64,9 @@ public SpanBuilderShim(TelemetryInfo telemetryInfo, String spanName) { @Override public SpanBuilder asChildOf(Span parent) { - if (parent == null) { + if (parent == null || parent instanceof NoopSpan) { return this; } - - // TODO - Verify we handle a no-op Span SpanShim spanShim = ShimUtil.getSpanShim(parent); return addReference(References.CHILD_OF, spanShim.context()); } diff --git a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java index a915cee1272..ce92600d23c 100644 --- a/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java +++ b/opentracing-shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java @@ -12,6 +12,7 @@ import io.opentelemetry.api.common.AttributeKey; import io.opentelemetry.api.common.Attributes; import io.opentelemetry.api.trace.SpanContext; +import io.opentelemetry.api.trace.SpanId; import io.opentelemetry.api.trace.SpanKind; import io.opentelemetry.api.trace.Tracer; import io.opentelemetry.context.Context; @@ -24,6 +25,7 @@ import io.opentelemetry.sdk.trace.samplers.SamplingResult; import io.opentelemetry.semconv.trace.attributes.SemanticAttributes; import io.opentracing.References; +import io.opentracing.noop.NoopSpan; import io.opentracing.tag.Tags; import java.math.BigInteger; import java.util.List; @@ -79,6 +81,19 @@ void parent_single() { } } + @Test + void noop_parent_span() { + SpanShim childSpan = + (SpanShim) + new SpanBuilderShim(telemetryInfo, SPAN_NAME).asChildOf(NoopSpan.INSTANCE).start(); + try { + SpanData spanData = ((ReadableSpan) childSpan.getSpan()).toSpanData(); + assertThat(SpanId.isValid(spanData.getParentSpanId())).isFalse(); + } finally { + childSpan.finish(); + } + } + @Test void parent_multipleFollowsFrom() { SpanShim parentSpan1 = (SpanShim) new SpanBuilderShim(telemetryInfo, SPAN_NAME).start();