Skip to content

Commit bc74103

Browse files
committed
fix(gax): unconditionally wrap logging tracer
1 parent b293ccd commit bc74103

5 files changed

Lines changed: 54 additions & 35 deletions

File tree

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

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -278,10 +278,8 @@ public static ClientContext create(StubSettings settings) throws IOException {
278278
.setLibraryMetadata(settings.getLibraryMetadata())
279279
.build();
280280
ApiTracerFactory apiTracerFactory = settings.getTracerFactory();
281-
if (apiTracerFactory instanceof SpanTracerFactory) {
282-
apiTracerFactory = apiTracerFactory.withContext(apiTracerContext);
283-
}
284-
if (com.google.api.gax.logging.LoggingUtils.isLoggingEnabled()) {
281+
apiTracerFactory = apiTracerFactory.withContext(apiTracerContext);
282+
if (!(apiTracerFactory instanceof com.google.api.gax.tracing.CompositeTracerFactory)) {
285283
com.google.api.gax.tracing.ApiTracerFactory loggingTracerFactory =
286284
new com.google.api.gax.tracing.LoggingTracerFactory().withContext(apiTracerContext);
287285
apiTracerFactory =

gax-java/gax/src/main/java/com/google/api/gax/tracing/CompositeTracer.java

Lines changed: 30 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,10 @@ public CompositeTracer(List<ApiTracer> tracers) {
4444
this.tracers = tracers;
4545
}
4646

47+
public List<ApiTracer> getTracers() {
48+
return tracers;
49+
}
50+
4751
@Override
4852
public Scope inScope() {
4953
// Returning a scope that closes all sub-scopes
@@ -52,7 +56,8 @@ public Scope inScope() {
5256
scopes[i] = tracers.get(i).inScope();
5357
}
5458
return () -> {
55-
for (Scope scope : scopes) {
59+
for (int i = scopes.length - 1; i >= 0; i--) {
60+
Scope scope = scopes[i];
5661
if (scope != null) {
5762
scope.close();
5863
}
@@ -62,22 +67,22 @@ public Scope inScope() {
6267

6368
@Override
6469
public void operationSucceeded() {
65-
for (ApiTracer tracer : tracers) {
66-
tracer.operationSucceeded();
70+
for (int i = tracers.size() - 1; i >= 0; i--) {
71+
tracers.get(i).operationSucceeded();
6772
}
6873
}
6974

7075
@Override
7176
public void operationCancelled() {
72-
for (ApiTracer tracer : tracers) {
73-
tracer.operationCancelled();
77+
for (int i = tracers.size() - 1; i >= 0; i--) {
78+
tracers.get(i).operationCancelled();
7479
}
7580
}
7681

7782
@Override
7883
public void operationFailed(Throwable error) {
79-
for (ApiTracer tracer : tracers) {
80-
tracer.operationFailed(error);
84+
for (int i = tracers.size() - 1; i >= 0; i--) {
85+
tracers.get(i).operationFailed(error);
8186
}
8287
}
8388

@@ -105,65 +110,65 @@ public void attemptStarted(Object request, int attemptNumber) {
105110

106111
@Override
107112
public void attemptSucceeded() {
108-
for (ApiTracer tracer : tracers) {
109-
tracer.attemptSucceeded();
113+
for (int i = tracers.size() - 1; i >= 0; i--) {
114+
tracers.get(i).attemptSucceeded();
110115
}
111116
}
112117

113118
@Override
114119
public void attemptCancelled() {
115-
for (ApiTracer tracer : tracers) {
116-
tracer.attemptCancelled();
120+
for (int i = tracers.size() - 1; i >= 0; i--) {
121+
tracers.get(i).attemptCancelled();
117122
}
118123
}
119124

120125
@Override
121126
@SuppressWarnings("deprecation")
122127
public void attemptFailed(Throwable error, org.threeten.bp.Duration delay) {
123-
for (ApiTracer tracer : tracers) {
124-
tracer.attemptFailed(error, delay);
128+
for (int i = tracers.size() - 1; i >= 0; i--) {
129+
tracers.get(i).attemptFailed(error, delay);
125130
}
126131
}
127132

128133
@Override
129134
public void attemptFailedDuration(Throwable error, java.time.Duration delay) {
130-
for (ApiTracer tracer : tracers) {
131-
tracer.attemptFailedDuration(error, delay);
135+
for (int i = tracers.size() - 1; i >= 0; i--) {
136+
tracers.get(i).attemptFailedDuration(error, delay);
132137
}
133138
}
134139

135140
@Override
136141
public void attemptFailedRetriesExhausted(Throwable error) {
137-
for (ApiTracer tracer : tracers) {
138-
tracer.attemptFailedRetriesExhausted(error);
142+
for (int i = tracers.size() - 1; i >= 0; i--) {
143+
tracers.get(i).attemptFailedRetriesExhausted(error);
139144
}
140145
}
141146

142147
@Override
143148
public void attemptPermanentFailure(Throwable error) {
144-
for (ApiTracer tracer : tracers) {
145-
tracer.attemptPermanentFailure(error);
149+
for (int i = tracers.size() - 1; i >= 0; i--) {
150+
tracers.get(i).attemptPermanentFailure(error);
146151
}
147152
}
148153

149154
@Override
150155
public void lroStartFailed(Throwable error) {
151-
for (ApiTracer tracer : tracers) {
152-
tracer.lroStartFailed(error);
156+
for (int i = tracers.size() - 1; i >= 0; i--) {
157+
tracers.get(i).lroStartFailed(error);
153158
}
154159
}
155160

156161
@Override
157162
public void lroStartSucceeded() {
158-
for (ApiTracer tracer : tracers) {
159-
tracer.lroStartSucceeded();
163+
for (int i = tracers.size() - 1; i >= 0; i--) {
164+
tracers.get(i).lroStartSucceeded();
160165
}
161166
}
162167

163168
@Override
164169
public void responseReceived() {
165-
for (ApiTracer tracer : tracers) {
166-
tracer.responseReceived();
170+
for (int i = tracers.size() - 1; i >= 0; i--) {
171+
tracers.get(i).responseReceived();
167172
}
168173
}
169174

gax-java/gax/src/main/java/com/google/api/gax/tracing/CompositeTracerFactory.java

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,21 +63,33 @@ private CompositeTracerFactory(
6363
@Override
6464
public ApiTracer newTracer(ApiTracer parent, SpanName spanName, OperationType operationType) {
6565
List<ApiTracer> tracers = new ArrayList<>(factories.size());
66-
for (ApiTracerFactory factory : factories) {
67-
tracers.add(factory.newTracer(parent, spanName, operationType));
66+
for (int i = 0; i < factories.size(); i++) {
67+
ApiTracer subParent = getSubParent(parent, i);
68+
tracers.add(factories.get(i).newTracer(subParent, spanName, operationType));
6869
}
6970
return new CompositeTracer(tracers);
7071
}
7172

7273
@Override
7374
public ApiTracer newTracer(ApiTracer parent, ApiTracerContext context) {
7475
List<ApiTracer> tracers = new ArrayList<>(factories.size());
75-
for (ApiTracerFactory factory : factories) {
76-
tracers.add(factory.newTracer(parent, context));
76+
for (int i = 0; i < factories.size(); i++) {
77+
ApiTracer subParent = getSubParent(parent, i);
78+
tracers.add(factories.get(i).newTracer(subParent, context));
7779
}
7880
return new CompositeTracer(tracers);
7981
}
8082

83+
private ApiTracer getSubParent(ApiTracer parent, int index) {
84+
if (parent instanceof CompositeTracer) {
85+
CompositeTracer compositeParent = (CompositeTracer) parent;
86+
if (index < compositeParent.getTracers().size()) {
87+
return compositeParent.getTracers().get(index);
88+
}
89+
}
90+
return parent;
91+
}
92+
8193
@Override
8294
public ApiTracerContext getApiTracerContext() {
8395
return apiTracerContext;

gax-java/gax/src/main/java/com/google/api/gax/tracing/LoggingTracer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,10 @@ private void recordActionableError(Throwable error) {
116116
}
117117
}
118118

119-
String message = error.getMessage() != null ? error.getMessage() : error.getClass().getName();
119+
String message = "Unknown Error";
120+
if (error != null) {
121+
message = error.getMessage() != null ? error.getMessage() : error.getClass().getName();
122+
}
120123
LoggingUtils.logActionableError(logContext, LOGGER_PROVIDER, message);
121124
}
122125
}

gax-java/gax/src/test/java/com/google/api/gax/rpc/ClientContextTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1304,7 +1304,8 @@ void testCreate_withTracerFactoryReturningNullWithContext() throws IOException {
13041304
Mockito.doReturn(apiTracerFactory).when(settings).getTracerFactory();
13051305

13061306
ClientContext context = ClientContext.create(settings);
1307-
assertThat(context.getTracerFactory()).isSameInstanceAs(apiTracerFactory);
1307+
assertThat(context.getTracerFactory())
1308+
.isInstanceOf(com.google.api.gax.tracing.CompositeTracerFactory.class);
13081309
verify(apiTracerFactory, times(1)).withContext(Mockito.any());
13091310
}
13101311
}

0 commit comments

Comments
 (0)