OpenTracing Shim: Properly set the status based on the error tag. (#4962)
This commit is contained in:
parent
f6deb4c1b7
commit
41c5fbc19a
|
|
@ -44,7 +44,7 @@ final class SpanBuilderShim extends BaseShimObject implements SpanBuilder {
|
|||
|
||||
private final List<Object> spanBuilderAttributeValues = new ArrayList<>();
|
||||
@Nullable private SpanKind spanKind;
|
||||
private boolean error;
|
||||
@Nullable private Boolean error;
|
||||
private long startTimestampMicros;
|
||||
|
||||
private static final Attributes CHILD_OF_ATTR =
|
||||
|
|
@ -249,8 +249,8 @@ final class SpanBuilderShim extends BaseShimObject implements SpanBuilder {
|
|||
}
|
||||
|
||||
io.opentelemetry.api.trace.Span span = builder.startSpan();
|
||||
if (error) {
|
||||
span.setStatus(StatusCode.ERROR);
|
||||
if (error != null) {
|
||||
span.setStatus(error ? StatusCode.ERROR : StatusCode.OK);
|
||||
}
|
||||
|
||||
return new SpanShim(telemetryInfo(), span, baggage);
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ final class SpanShim extends BaseShimObject implements Span, ImplicitContextKeye
|
|||
// TODO: confirm we can safely ignore span.kind after Span was created
|
||||
// https://github.com/bogdandrutu/opentelemetry/issues/42
|
||||
} else if (Tags.ERROR.getKey().equals(key)) {
|
||||
StatusCode canonicalCode = Boolean.parseBoolean(value) ? StatusCode.ERROR : StatusCode.UNSET;
|
||||
StatusCode canonicalCode = Boolean.parseBoolean(value) ? StatusCode.ERROR : StatusCode.OK;
|
||||
span.setStatus(canonicalCode);
|
||||
} else {
|
||||
span.setAttribute(key, value);
|
||||
|
|
@ -98,7 +98,7 @@ final class SpanShim extends BaseShimObject implements Span, ImplicitContextKeye
|
|||
@Override
|
||||
public Span setTag(String key, boolean value) {
|
||||
if (Tags.ERROR.getKey().equals(key)) {
|
||||
StatusCode canonicalCode = value ? StatusCode.ERROR : StatusCode.UNSET;
|
||||
StatusCode canonicalCode = value ? StatusCode.ERROR : StatusCode.OK;
|
||||
span.setStatus(canonicalCode);
|
||||
} else {
|
||||
span.setAttribute(key, value);
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import static org.assertj.core.api.Assertions.assertThat;
|
|||
import io.opentelemetry.api.GlobalOpenTelemetry;
|
||||
import io.opentelemetry.api.common.AttributeKey;
|
||||
import io.opentelemetry.api.common.Attributes;
|
||||
import io.opentelemetry.api.trace.SpanContext;
|
||||
import io.opentelemetry.api.trace.SpanKind;
|
||||
import io.opentelemetry.api.trace.Tracer;
|
||||
import io.opentelemetry.context.Context;
|
||||
|
|
@ -18,10 +19,12 @@ import io.opentelemetry.sdk.trace.ReadableSpan;
|
|||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.data.LinkData;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||
import io.opentelemetry.sdk.trace.data.StatusData;
|
||||
import io.opentelemetry.sdk.trace.samplers.Sampler;
|
||||
import io.opentelemetry.sdk.trace.samplers.SamplingResult;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import io.opentracing.References;
|
||||
import io.opentracing.tag.Tags;
|
||||
import java.math.BigInteger;
|
||||
import java.util.List;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
|
|
@ -41,6 +44,23 @@ class SpanBuilderShimTest {
|
|||
GlobalOpenTelemetry.resetForTest();
|
||||
}
|
||||
|
||||
@Test
|
||||
void default_values() {
|
||||
SpanShim span = (SpanShim) new SpanBuilderShim(telemetryInfo, SPAN_NAME).start();
|
||||
try {
|
||||
SpanData spanData = ((ReadableSpan) span.getSpan()).toSpanData();
|
||||
assertThat(spanData.getName()).isEqualTo(SPAN_NAME);
|
||||
assertThat(spanData.getStatus()).isEqualTo(StatusData.unset());
|
||||
assertThat(spanData.getSpanContext()).isNotEqualTo(SpanContext.getInvalid());
|
||||
assertThat(spanData.getKind()).isEqualTo(SpanKind.INTERNAL);
|
||||
assertThat(spanData.getAttributes().size()).isEqualTo(0);
|
||||
assertThat(spanData.getEvents()).hasSize(0);
|
||||
assertThat(spanData.getLinks()).hasSize(0);
|
||||
} finally {
|
||||
span.finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void parent_single() {
|
||||
SpanShim parentSpan = (SpanShim) new SpanBuilderShim(telemetryInfo, SPAN_NAME).start();
|
||||
|
|
@ -297,6 +317,54 @@ class SpanBuilderShimTest {
|
|||
assertThat(spanData.getStartEpochNanos()).isEqualTo(micros * 1000L);
|
||||
}
|
||||
|
||||
@Test
|
||||
void setAttribute_errorAsBoolean() {
|
||||
SpanShim span1 =
|
||||
(SpanShim)
|
||||
new SpanBuilderShim(telemetryInfo, SPAN_NAME)
|
||||
.withTag(Tags.ERROR.getKey(), true)
|
||||
.start();
|
||||
SpanShim span2 =
|
||||
(SpanShim)
|
||||
new SpanBuilderShim(telemetryInfo, SPAN_NAME)
|
||||
.withTag(Tags.ERROR.getKey(), false)
|
||||
.start();
|
||||
try {
|
||||
SpanData spanData1 = ((ReadableSpan) span1.getSpan()).toSpanData();
|
||||
assertThat(spanData1.getStatus()).isEqualTo(StatusData.error());
|
||||
|
||||
SpanData spanData2 = ((ReadableSpan) span2.getSpan()).toSpanData();
|
||||
assertThat(spanData2.getStatus()).isEqualTo(StatusData.ok());
|
||||
} finally {
|
||||
span1.finish();
|
||||
span2.finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void setAttribute_errorAsString() {
|
||||
SpanShim span1 =
|
||||
(SpanShim)
|
||||
new SpanBuilderShim(telemetryInfo, SPAN_NAME)
|
||||
.withTag(Tags.ERROR.getKey(), "tRuE")
|
||||
.start();
|
||||
SpanShim span2 =
|
||||
(SpanShim)
|
||||
new SpanBuilderShim(telemetryInfo, SPAN_NAME)
|
||||
.withTag(Tags.ERROR.getKey(), "FaLsE")
|
||||
.start();
|
||||
try {
|
||||
SpanData spanData1 = ((ReadableSpan) span1.getSpan()).toSpanData();
|
||||
assertThat(spanData1.getStatus()).isEqualTo(StatusData.error());
|
||||
|
||||
SpanData spanData2 = ((ReadableSpan) span2.getSpan()).toSpanData();
|
||||
assertThat(spanData2.getStatus()).isEqualTo(StatusData.ok());
|
||||
} finally {
|
||||
span1.finish();
|
||||
span2.finish();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
void setAttribute_unrecognizedType() {
|
||||
SpanShim span =
|
||||
|
|
|
|||
|
|
@ -15,8 +15,10 @@ import io.opentelemetry.sdk.trace.ReadableSpan;
|
|||
import io.opentelemetry.sdk.trace.SdkTracerProvider;
|
||||
import io.opentelemetry.sdk.trace.data.EventData;
|
||||
import io.opentelemetry.sdk.trace.data.SpanData;
|
||||
import io.opentelemetry.sdk.trace.data.StatusData;
|
||||
import io.opentelemetry.semconv.trace.attributes.SemanticAttributes;
|
||||
import io.opentracing.log.Fields;
|
||||
import io.opentracing.tag.Tags;
|
||||
import java.math.BigInteger;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
|
@ -60,6 +62,32 @@ class SpanShimTest {
|
|||
assertThat(contextShim.baggageItems().iterator().hasNext()).isFalse();
|
||||
}
|
||||
|
||||
@Test
|
||||
void setAttribute_errorAsBoolean() {
|
||||
SpanShim spanShim = new SpanShim(telemetryInfo, span);
|
||||
spanShim.setTag(Tags.ERROR.getKey(), true);
|
||||
|
||||
SpanData spanData = ((ReadableSpan) span).toSpanData();
|
||||
assertThat(spanData.getStatus()).isEqualTo(StatusData.error());
|
||||
|
||||
spanShim.setTag(Tags.ERROR.getKey(), false);
|
||||
spanData = ((ReadableSpan) span).toSpanData();
|
||||
assertThat(spanData.getStatus()).isEqualTo(StatusData.ok());
|
||||
}
|
||||
|
||||
@Test
|
||||
void setAttribute_errorAsString() {
|
||||
SpanShim spanShim = new SpanShim(telemetryInfo, span);
|
||||
spanShim.setTag(Tags.ERROR.getKey(), "tRuE");
|
||||
|
||||
SpanData spanData = ((ReadableSpan) span).toSpanData();
|
||||
assertThat(spanData.getStatus()).isEqualTo(StatusData.error());
|
||||
|
||||
spanShim.setTag(Tags.ERROR.getKey(), "FaLsE");
|
||||
spanData = ((ReadableSpan) span).toSpanData();
|
||||
assertThat(spanData.getStatus()).isEqualTo(StatusData.ok());
|
||||
}
|
||||
|
||||
@Test
|
||||
void setAttribute_unrecognizedType() {
|
||||
SpanShim spanShim = new SpanShim(telemetryInfo, span);
|
||||
|
|
|
|||
Loading…
Reference in New Issue