diff --git a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java index cb41da9ccbeb..9ef300d6323d 100644 --- a/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java +++ b/sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java @@ -35,6 +35,7 @@ import io.opentelemetry.api.trace.Span; import io.opentelemetry.api.trace.SpanBuilder; import io.opentelemetry.api.trace.SpanKind; +import io.opentelemetry.api.trace.StatusCode; import io.opentelemetry.api.trace.Tracer; import java.util.HashMap; import java.util.Map; @@ -53,6 +54,7 @@ class OpenTelemetryTracingTracer implements ApiTracer { private final String attemptSpanName; private final ApiTracerContext apiTracerContext; private @Nullable Span attemptSpan; + private io.opentelemetry.context.@Nullable Scope attemptScope; @Override public void injectTraceContext(java.util.Map carrier) { @@ -225,21 +227,22 @@ private void recordErrorAndEndAttempt(@Nullable Throwable error) { attemptSpan.setAllAttributes(ObservabilityUtils.toOtelAttributes(responseAttributes)); } - if (error != null && !Strings.isNullOrEmpty(error.getMessage())) { - attemptSpan.setAttribute( - ObservabilityAttributes.STATUS_MESSAGE_ATTRIBUTE, error.getMessage()); + if (error != null) { + attemptSpan.setStatus(StatusCode.ERROR); + if (!Strings.isNullOrEmpty(error.getMessage())) { + attemptSpan.setAttribute( + ObservabilityAttributes.STATUS_MESSAGE_ATTRIBUTE, error.getMessage()); + } } endAttempt(); } private void endAttempt() { - if (attemptSpan == null) { - return; + if (attemptSpan != null) { + attemptSpan.end(); + attemptSpan = null; } - - attemptSpan.end(); - attemptSpan = null; } @Override diff --git a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryTracingTracerTest.java b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryTracingTracerTest.java index 33fa2efcc0da..d4aa18ce6176 100644 --- a/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryTracingTracerTest.java +++ b/sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryTracingTracerTest.java @@ -87,6 +87,16 @@ void testAttemptLifecycle_startsAndEndsAttemptSpan() { verify(span).end(); } + @Test + void testAttemptFailed_setsErrorStatus() { + openTelemetryTracingTracer.attemptStarted(new Object(), 1); + openTelemetryTracingTracer.attemptFailedDuration( + new RuntimeException("Test error"), java.time.Duration.ofSeconds(1)); + + verify(span).setStatus(io.opentelemetry.api.trace.StatusCode.ERROR); + verify(span).end(); + } + @Test void testAttemptSucceeded_grpc() { ApiTracerContext context =