Skip to content

Commit abd4e02

Browse files
committed
fix: implement inScope for OpenTelemetryTracingTracer
1 parent cc4b980 commit abd4e02

3 files changed

Lines changed: 37 additions & 5 deletions

File tree

sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/rpc/ClientContext.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,7 @@ static ApiTracerFactory getApiTracerFactory(
300300
if (LoggingUtils.isLoggingEnabled()) {
301301
apiTracerFactory =
302302
new CompositeTracerFactory(
303-
ImmutableList.of(new LoggingTracerFactory(), apiTracerFactory));
303+
ImmutableList.of(apiTracerFactory, new LoggingTracerFactory()));
304304
}
305305

306306
if (apiTracerFactory.needsContext()) {

sdk-platform-java/gax-java/gax/src/main/java/com/google/api/gax/tracing/OpenTelemetryTracingTracer.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,15 @@ public void injectTraceContext(java.util.Map<String, String> carrier) {
7171
}
7272
}
7373

74+
@Override
75+
public Scope inScope() {
76+
if (attemptSpan == null) {
77+
return () -> {};
78+
}
79+
io.opentelemetry.context.Scope otelScope = attemptSpan.makeCurrent();
80+
return otelScope::close;
81+
}
82+
7483
/**
7584
* Creates a new instance of {@code OpenTelemetryTracingTracer}.
7685
*

sdk-platform-java/gax-java/gax/src/test/java/com/google/api/gax/tracing/OpenTelemetryTracingTracerTest.java

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import static org.mockito.ArgumentMatchers.any;
3434
import static org.mockito.ArgumentMatchers.anyString;
3535
import static org.mockito.ArgumentMatchers.eq;
36+
import static org.mockito.Mockito.lenient;
3637
import static org.mockito.Mockito.never;
3738
import static org.mockito.Mockito.verify;
3839
import static org.mockito.Mockito.when;
@@ -49,6 +50,7 @@
4950
import io.opentelemetry.api.trace.SpanBuilder;
5051
import io.opentelemetry.api.trace.SpanKind;
5152
import io.opentelemetry.api.trace.Tracer;
53+
import io.opentelemetry.context.Scope;
5254
import java.net.ConnectException;
5355
import java.net.SocketTimeoutException;
5456
import java.util.Map;
@@ -64,15 +66,17 @@ class OpenTelemetryTracingTracerTest {
6466
@Mock private Tracer tracer;
6567
@Mock private SpanBuilder spanBuilder;
6668
@Mock private Span span;
69+
@Mock private Scope scope;
6770
private OpenTelemetryTracingTracer openTelemetryTracingTracer;
6871
private static final String ATTEMPT_SPAN_NAME = "Service/Method/attempt";
6972

7073
@BeforeEach
7174
void setUp() {
72-
when(tracer.spanBuilder(anyString())).thenReturn(spanBuilder);
73-
when(spanBuilder.setSpanKind(any(SpanKind.class))).thenReturn(spanBuilder);
74-
when(spanBuilder.setAllAttributes(any(Attributes.class))).thenReturn(spanBuilder);
75-
when(spanBuilder.startSpan()).thenReturn(span);
75+
lenient().when(tracer.spanBuilder(anyString())).thenReturn(spanBuilder);
76+
lenient().when(spanBuilder.setSpanKind(any(SpanKind.class))).thenReturn(spanBuilder);
77+
lenient().when(spanBuilder.setAllAttributes(any(Attributes.class))).thenReturn(spanBuilder);
78+
lenient().when(spanBuilder.startSpan()).thenReturn(span);
79+
lenient().when(span.makeCurrent()).thenReturn(scope);
7680
openTelemetryTracingTracer =
7781
new OpenTelemetryTracingTracer(tracer, ApiTracerContext.empty(), ATTEMPT_SPAN_NAME);
7882
}
@@ -680,4 +684,23 @@ void testInjectTraceContext_addsHeaders() {
680684
assertThat(carrier.get("traceparent")).contains("00000000000000000000000000000001");
681685
assertThat(carrier.get("traceparent")).contains("0000000000000002");
682686
}
687+
688+
@Test
689+
void testInScope_whenAttemptSpanActive_makesSpanCurrentAndClosesScope() {
690+
openTelemetryTracingTracer.attemptStarted(new Object(), 1);
691+
ApiTracer.Scope tracerScope = openTelemetryTracingTracer.inScope();
692+
verify(span).makeCurrent();
693+
694+
tracerScope.close();
695+
verify(scope).close();
696+
}
697+
698+
@Test
699+
void testInScope_whenAttemptSpanNull_returnsNoopScope() {
700+
ApiTracer.Scope tracerScope = openTelemetryTracingTracer.inScope();
701+
verify(span, never()).makeCurrent();
702+
703+
tracerScope.close();
704+
verify(scope, never()).close();
705+
}
683706
}

0 commit comments

Comments
 (0)