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 f3edff4ae82..2059baf2997 100644 --- a/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java +++ b/opentracing_shim/src/main/java/io/opentelemetry/opentracingshim/SpanBuilderShim.java @@ -183,7 +183,8 @@ public Span start() { builder.setNoParent(); } else if (parentSpan != null) { builder.setParent(parentSpan.getSpan()); - distContext = spanContextTable().get(parentSpan).getDistributedContext(); + SpanContextShim contextShim = spanContextTable().get(parentSpan); + distContext = contextShim == null ? null : contextShim.getDistributedContext(); } else if (parentSpanContext != null) { builder.setParent(parentSpanContext.getSpanContext()); distContext = parentSpanContext.getDistributedContext(); 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 1a678794a8e..8b8b25c1bc2 100644 --- a/opentracing_shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java +++ b/opentracing_shim/src/test/java/io/opentelemetry/opentracingshim/SpanBuilderShimTest.java @@ -18,6 +18,7 @@ import static io.opentelemetry.opentracingshim.TestUtils.getBaggageMap; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import io.opentelemetry.sdk.distributedcontext.DistributedContextManagerSdk; import io.opentelemetry.sdk.trace.TracerSdkFactory; @@ -74,4 +75,22 @@ public void baggage_parentContext() { parentSpan.finish(); } } + + @Test + public void parent_NullContextShim() { + /* SpanContextShim is null until Span.context() or Span.getBaggageItem() are called. + * Verify a null SpanContextShim in the parent is handled properly. */ + SpanShim parentSpan = (SpanShim) new SpanBuilderShim(telemetryInfo, SPAN_NAME).start(); + try { + SpanShim childSpan = + (SpanShim) new SpanBuilderShim(telemetryInfo, SPAN_NAME).asChildOf(parentSpan).start(); + try { + assertFalse(childSpan.context().baggageItems().iterator().hasNext()); + } finally { + childSpan.finish(); + } + } finally { + parentSpan.finish(); + } + } }