Skip to content

Commit a125829

Browse files
refactor: remove the usages of SpanName constructor of TracedUnaryCallable (#12948)
This PR removes the usages of SpanName constructor of TracedUnaryCallable, and migrates all usages to use ApiTracerContext instead. The constructor is now marked as `@ObsoleteApi` and it should be removed once the usages in downstream libraries (java-bigtable) are removed. --------- Co-authored-by: gemini-code-assist[bot] <176961590+gemini-code-assist[bot]@users.noreply.github.com>
1 parent 66ded32 commit a125829

5 files changed

Lines changed: 48 additions & 52 deletions

File tree

sdk-platform-java/gax-java/gax-grpc/src/main/java/com/google/api/gax/grpc/GrpcCallableFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@ OperationCallable<RequestT, ResponseT, MetadataT> createOperationCallable(
199199
// Create a sub-trace for the initial RPC that starts the operation.
200200
UnaryCallable<RequestT, OperationSnapshot> tracedInitialCallable =
201201
new TracedOperationInitialCallable<>(
202-
initialCallable, clientContext.getTracerFactory(), initialSpanName);
202+
initialCallable, clientContext.getTracerFactory(), tracerContext);
203203

204204
LongRunningClient longRunningClient = new GrpcLongRunningClient(operationsStub);
205205
OperationCallable<RequestT, ResponseT, MetadataT> operationCallable =

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ public class TracedOperationInitialCallable<RequestT>
4949
public TracedOperationInitialCallable(
5050
UnaryCallable<RequestT, OperationSnapshot> innerCallable,
5151
ApiTracerFactory tracedFactory,
52-
SpanName spanName) {
53-
super(innerCallable, tracedFactory, spanName);
52+
ApiTracerContext apiTracerContext) {
53+
super(innerCallable, tracedFactory, apiTracerContext);
5454
}
5555

5656
@Override

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

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.google.api.core.ApiFutures;
3434
import com.google.api.core.BetaApi;
3535
import com.google.api.core.InternalApi;
36+
import com.google.api.core.ObsoleteApi;
3637
import com.google.api.gax.rpc.ApiCallContext;
3738
import com.google.api.gax.rpc.ResourceNameExtractor;
3839
import com.google.api.gax.rpc.UnaryCallable;
@@ -54,6 +55,7 @@ public class TracedUnaryCallable<RequestT, ResponseT> extends UnaryCallable<Requ
5455
@Nullable private final ApiTracerContext apiTracerContext;
5556
@Nullable private final ResourceNameExtractor<RequestT> resourceNameExtractor;
5657

58+
@ObsoleteApi("Use constructor with ApiTracerContext instead")
5759
public TracedUnaryCallable(
5860
UnaryCallable<RequestT, ResponseT> innerCallable,
5961
ApiTracerFactory tracerFactory,
@@ -78,6 +80,13 @@ public TracedUnaryCallable(
7880
this.resourceNameExtractor = resourceNameExtractor;
7981
}
8082

83+
TracedUnaryCallable(
84+
UnaryCallable<RequestT, ResponseT> innerCallable,
85+
ApiTracerFactory tracerFactory,
86+
ApiTracerContext apiTracerContext) {
87+
this(innerCallable, tracerFactory, apiTracerContext, null);
88+
}
89+
8190
/**
8291
* Calls the wrapped {@link UnaryCallable} within the context of a new trace.
8392
*

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

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232
import static org.mockito.ArgumentMatchers.anyInt;
3333
import static org.mockito.Mockito.any;
3434
import static org.mockito.Mockito.anyString;
35-
import static org.mockito.Mockito.eq;
3635
import static org.mockito.Mockito.times;
3736
import static org.mockito.Mockito.verify;
3837
import static org.mockito.Mockito.verifyNoMoreInteractions;
@@ -43,9 +42,11 @@
4342
import com.google.api.gax.rpc.ApiCallContext;
4443
import com.google.api.gax.rpc.Callables;
4544
import com.google.api.gax.rpc.ClientContext;
45+
import com.google.api.gax.rpc.LibraryMetadata;
4646
import com.google.api.gax.rpc.UnaryCallSettings;
4747
import com.google.api.gax.rpc.UnaryCallable;
4848
import com.google.api.gax.rpc.testing.FakeCallContext;
49+
import com.google.api.gax.tracing.ApiTracerContext.Transport;
4950
import com.google.api.gax.tracing.ApiTracerFactory.OperationType;
5051
import org.junit.jupiter.api.BeforeEach;
5152
import org.junit.jupiter.api.Test;
@@ -55,7 +56,14 @@
5556

5657
@ExtendWith(MockitoExtension.class)
5758
class TracedCallableTest {
58-
private static final SpanName SPAN_NAME = SpanName.of("FakeClient", "FakeRpc");
59+
60+
private static final ApiTracerContext TRACER_CONTEXT =
61+
ApiTracerContext.newBuilder()
62+
.setFullMethodName("FakeClient/FakeRpc")
63+
.setTransport(Transport.GRPC)
64+
.setLibraryMetadata(LibraryMetadata.empty())
65+
.setOperationType(OperationType.Unary)
66+
.build();
5967

6068
@Mock private ApiTracerFactory tracerFactory;
6169
private ApiTracer parentTracer;
@@ -71,8 +79,7 @@ void setUp() {
7179
parentTracer = BaseApiTracer.getInstance();
7280

7381
// Wire the mock tracer factory
74-
when(tracerFactory.newTracer(
75-
any(ApiTracer.class), any(SpanName.class), eq(OperationType.Unary)))
82+
when(tracerFactory.newTracer(any(ApiTracer.class), any(ApiTracerContext.class)))
7683
.thenReturn(tracer);
7784

7885
// Wire the mock inner callable
@@ -87,7 +94,7 @@ public UnaryCallable<String, String> setupTracedUnaryCallable(
8794
UnaryCallSettings<Object, Object> callSettings) {
8895
UnaryCallable<String, String> callable =
8996
Callables.retrying(innerCallable, callSettings, clientContext);
90-
return new TracedUnaryCallable<>(callable, tracerFactory, SPAN_NAME);
97+
return new TracedUnaryCallable<>(callable, tracerFactory, TRACER_CONTEXT);
9198
}
9299

93100
@Test
@@ -102,7 +109,7 @@ void testNonRetriedCallable() throws Exception {
102109

103110
ApiFuture<String> future = callable.futureCall("Is your refrigerator running?", callContext);
104111

105-
verify(tracerFactory, times(1)).newTracer(parentTracer, SPAN_NAME, OperationType.Unary);
112+
verify(tracerFactory, times(1)).newTracer(parentTracer, TRACER_CONTEXT);
106113
verify(tracer, times(1)).attemptStarted(anyString(), anyInt());
107114
verify(tracer, times(1)).attemptSucceeded();
108115
verify(tracer, times(1)).operationSucceeded();

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

Lines changed: 23 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,13 @@
4747
import com.google.api.gax.tracing.ApiTracerFactory.OperationType;
4848
import org.junit.jupiter.api.Test;
4949
import org.junit.jupiter.api.extension.ExtendWith;
50-
import org.junit.jupiter.params.ParameterizedTest;
51-
import org.junit.jupiter.params.provider.ValueSource;
5250
import org.mockito.ArgumentCaptor;
5351
import org.mockito.Mock;
5452
import org.mockito.junit.jupiter.MockitoExtension;
5553

5654
@ExtendWith(MockitoExtension.class)
5755
class TracedUnaryCallableTest {
58-
private static final SpanName SPAN_NAME = SpanName.of("FakeClient", "FakeRpc");
56+
5957
private static final ApiTracerContext TRACER_CONTEXT =
6058
ApiTracerContext.newBuilder()
6159
.setFullMethodName("FakeClient/FakeRpc")
@@ -73,21 +71,13 @@ class TracedUnaryCallableTest {
7371
private TracedUnaryCallable<String, String> tracedUnaryCallable;
7472
private FakeCallContext callContext;
7573

76-
void init(boolean useContext) {
74+
void init() {
7775
parentTracer = BaseApiTracer.getInstance();
7876

7977
// Wire the mock tracer factory
80-
if (useContext) {
81-
when(tracerFactory.newTracer(any(ApiTracer.class), any(ApiTracerContext.class)))
82-
.thenReturn(tracer);
83-
tracedUnaryCallable =
84-
new TracedUnaryCallable<>(innerCallable, tracerFactory, TRACER_CONTEXT, null);
85-
} else {
86-
when(tracerFactory.newTracer(
87-
any(ApiTracer.class), any(SpanName.class), eq(OperationType.Unary)))
88-
.thenReturn(tracer);
89-
tracedUnaryCallable = new TracedUnaryCallable<>(innerCallable, tracerFactory, SPAN_NAME);
90-
}
78+
when(tracerFactory.newTracer(any(ApiTracer.class), any(ApiTracerContext.class)))
79+
.thenReturn(tracer);
80+
tracedUnaryCallable = new TracedUnaryCallable<>(innerCallable, tracerFactory, TRACER_CONTEXT);
9181

9282
// Wire the mock inner callable
9383
innerResult = SettableApiFuture.create();
@@ -96,29 +86,23 @@ void init(boolean useContext) {
9686
callContext = FakeCallContext.createDefault();
9787
}
9888

99-
@ParameterizedTest
100-
@ValueSource(booleans = {false, true})
101-
void testTracerCreated(boolean useContext) {
102-
init(useContext);
89+
@Test
90+
void testTracerCreated() {
91+
init();
10392
tracedUnaryCallable.futureCall("test", callContext);
104-
if (useContext) {
105-
verify(tracerFactory, times(1)).newTracer(parentTracer, TRACER_CONTEXT);
106-
} else {
107-
verify(tracerFactory, times(1)).newTracer(parentTracer, SPAN_NAME, OperationType.Unary);
108-
}
93+
verify(tracerFactory, times(1)).newTracer(parentTracer, TRACER_CONTEXT);
10994
}
11095

11196
@Test
11297
void testOperationTypeIsSet() {
11398
when(tracerFactory.newTracer(any(ApiTracer.class), any(ApiTracerContext.class)))
11499
.thenReturn(tracer);
115-
tracedUnaryCallable =
116-
new TracedUnaryCallable<>(innerCallable, tracerFactory, TRACER_CONTEXT, null);
100+
tracedUnaryCallable = new TracedUnaryCallable<>(innerCallable, tracerFactory, TRACER_CONTEXT);
117101
ApiTracerContext contextWithWrongType =
118102
TRACER_CONTEXT.toBuilder().setOperationType(OperationType.BidiStreaming).build();
119103

120104
tracedUnaryCallable =
121-
new TracedUnaryCallable<>(innerCallable, tracerFactory, contextWithWrongType, null);
105+
new TracedUnaryCallable<>(innerCallable, tracerFactory, contextWithWrongType);
122106

123107
innerResult = SettableApiFuture.create();
124108
when(innerCallable.futureCall(anyString(), any(ApiCallContext.class))).thenReturn(innerResult);
@@ -131,40 +115,36 @@ void testOperationTypeIsSet() {
131115
assertThat(contextCaptor.getValue().operationType()).isEqualTo(OperationType.Unary);
132116
}
133117

134-
@ParameterizedTest
135-
@ValueSource(booleans = {false, true})
136-
void testOperationFinish(boolean useContext) {
137-
init(useContext);
118+
@Test
119+
void testOperationFinish() {
120+
init();
138121
innerResult.set("successful result");
139122
tracedUnaryCallable.futureCall("test", callContext);
140123

141124
verify(tracer, times(1)).operationSucceeded();
142125
}
143126

144-
@ParameterizedTest
145-
@ValueSource(booleans = {false, true})
146-
void testOperationCancelled(boolean useContext) {
147-
init(useContext);
127+
@Test
128+
void testOperationCancelled() {
129+
init();
148130
innerResult.cancel(true);
149131
tracedUnaryCallable.futureCall("test", callContext);
150132
verify(tracer, times(1)).operationCancelled();
151133
}
152134

153-
@ParameterizedTest
154-
@ValueSource(booleans = {false, true})
155-
void testOperationFailed(boolean useContext) {
156-
init(useContext);
135+
@Test
136+
void testOperationFailed() {
137+
init();
157138
RuntimeException fakeError = new RuntimeException("fake error");
158139
innerResult.setException(fakeError);
159140
tracedUnaryCallable.futureCall("test", callContext);
160141

161142
verify(tracer, times(1)).operationFailed(fakeError);
162143
}
163144

164-
@ParameterizedTest
165-
@ValueSource(booleans = {false, true})
166-
void testSyncError(boolean useContext) {
167-
init(useContext);
145+
@Test
146+
void testSyncError() {
147+
init();
168148
RuntimeException fakeError = new RuntimeException("fake error");
169149

170150
// Reset the irrelevant expectations from setup. (only needed to silence the warnings).

0 commit comments

Comments
 (0)