From b5f56ccac747619913cf45133124b37600efacce Mon Sep 17 00:00:00 2001 From: HaloFour Date: Sat, 7 Aug 2021 22:17:40 -0400 Subject: [PATCH] Adds getParentSpanContext to ReadableSpan interface (#3454) * Adds getParentSpanContext to ReadableSpan * Unit tests --- .../opentelemetry-sdk-trace.txt | 3 +++ .../io/opentelemetry/sdk/trace/ReadableSpan.java | 8 ++++++++ .../sdk/trace/RecordEventsReadableSpan.java | 9 +++++---- .../sdk/trace/RecordEventsReadableSpanTest.java | 16 ++++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt index 1806a13b6f..8e86b36a5d 100644 --- a/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt +++ b/docs/apidiffs/current_vs_latest/opentelemetry-sdk-trace.txt @@ -1,4 +1,7 @@ Comparing source compatibility of against +**** MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.trace.ReadableSpan (not serializable) + === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 + +++* NEW METHOD: PUBLIC(+) ABSTRACT(+) io.opentelemetry.api.trace.SpanContext getParentSpanContext() ***! MODIFIED INTERFACE: PUBLIC ABSTRACT io.opentelemetry.sdk.trace.samplers.SamplingResult (not serializable) === CLASS FILE FORMAT VERSION: 52.0 <- 52.0 +++! NEW METHOD: PUBLIC(+) STATIC(+) io.opentelemetry.sdk.trace.samplers.SamplingResult drop() diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java index 20cc052cce..ec086c1783 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/ReadableSpan.java @@ -23,6 +23,14 @@ public interface ReadableSpan { */ SpanContext getSpanContext(); + /** + * Returns the parent {@link SpanContext} of the {@link Span}, or {@link SpanContext#getInvalid()} + * if this is a root span. + * + * @return the parent {@link SpanContext} of the {@link Span} + */ + SpanContext getParentSpanContext(); + /** * Returns the name of the {@code Span}. * diff --git a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java index 42bea711b5..5113ead4df 100644 --- a/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java +++ b/sdk/trace/src/main/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpan.java @@ -202,6 +202,11 @@ final class RecordEventsReadableSpan implements ReadWriteSpan { return context; } + @Override + public SpanContext getParentSpanContext() { + return parentSpanContext; + } + /** * Returns the name of the {@code Span}. * @@ -451,10 +456,6 @@ final class RecordEventsReadableSpan implements ReadWriteSpan { } } - SpanContext getParentSpanContext() { - return parentSpanContext; - } - Resource getResource() { return resource; } diff --git a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java index 8e6308e589..7cb8c04511 100644 --- a/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java +++ b/sdk/trace/src/test/java/io/opentelemetry/sdk/trace/RecordEventsReadableSpanTest.java @@ -214,10 +214,26 @@ class RecordEventsReadableSpanTest { } finally { span.end(); } + assertThat(span.getParentSpanContext().isValid()).isFalse(); SpanData spanData = span.toSpanData(); assertThat(SpanId.isValid(spanData.getParentSpanId())).isFalse(); } + @Test + void toSpanData_ChildSpan() { + RecordEventsReadableSpan span = createTestSpan(SpanKind.INTERNAL); + try { + spanDoWork(span, null, null); + } finally { + span.end(); + } + assertThat(span.getParentSpanContext().isValid()).isTrue(); + assertThat(span.getParentSpanContext().getTraceId()).isEqualTo(traceId); + assertThat(span.getParentSpanContext().getSpanId()).isEqualTo(parentSpanId); + SpanData spanData = span.toSpanData(); + assertThat(spanData.getParentSpanId()).isEqualTo(parentSpanId); + } + @Test void toSpanData_WithInitialAttributes() { RecordEventsReadableSpan span = createTestSpanWithAttributes(attributes);