Skip to content

Commit 04c0b95

Browse files
committed
Created new grpc wrapper
1 parent 387fad5 commit 04c0b95

File tree

4 files changed

+37
-9
lines changed

4 files changed

+37
-9
lines changed

google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java

-1
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,6 @@ public class BuiltInMetricsConstant {
101101
DIRECT_PATH_ENABLED_KEY,
102102
DIRECT_PATH_USED_KEY);
103103

104-
public static boolean DIRECT_PATH_ENABLED;
105104
static Aggregation AGGREGATION_WITH_MILLIS_HISTOGRAM =
106105
Aggregation.explicitBucketHistogram(
107106
ImmutableList.of(

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java

+16-5
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@
6464
import com.google.cloud.grpc.GrpcTransportOptions;
6565
import com.google.cloud.spanner.AdminRequestsPerMinuteExceededException;
6666
import com.google.cloud.spanner.BackupId;
67-
import com.google.cloud.spanner.BuiltInMetricsConstant;
6867
import com.google.cloud.spanner.ErrorCode;
6968
import com.google.cloud.spanner.Restore;
7069
import com.google.cloud.spanner.SpannerException;
@@ -87,6 +86,8 @@
8786
import com.google.common.base.Function;
8887
import com.google.common.base.MoreObjects;
8988
import com.google.common.base.Preconditions;
89+
import com.google.common.base.Supplier;
90+
import com.google.common.base.Suppliers;
9091
import com.google.common.collect.ImmutableList;
9192
import com.google.common.collect.ImmutableSet;
9293
import com.google.common.io.Resources;
@@ -278,6 +279,11 @@ public class GapicSpannerRpc implements SpannerRpc {
278279
private final int numChannels;
279280
private final boolean isGrpcGcpExtensionEnabled;
280281

282+
private Supplier<Boolean> directPathEnabledSupplier =
283+
() -> {
284+
return false;
285+
};;
286+
281287
public static GapicSpannerRpc create(SpannerOptions options) {
282288
return new GapicSpannerRpc(options);
283289
}
@@ -353,7 +359,9 @@ public GapicSpannerRpc(final SpannerOptions options) {
353359
SpannerInterceptorProvider.create(
354360
MoreObjects.firstNonNull(
355361
options.getInterceptorProvider(),
356-
SpannerInterceptorProvider.createDefault(options.getOpenTelemetry())))
362+
SpannerInterceptorProvider.createDefault(
363+
options.getOpenTelemetry(),
364+
(() -> directPathEnabledSupplier.get()))))
357365
// This sets the trace context headers.
358366
.withTraceContext(endToEndTracingEnabled, options.getOpenTelemetry())
359367
// This sets the response compressor (Server -> Client).
@@ -411,9 +419,12 @@ public GapicSpannerRpc(final SpannerOptions options) {
411419
.build();
412420
ClientContext clientContext = ClientContext.create(spannerStubSettings);
413421
this.spannerStub = GrpcSpannerStubWrapper.create(spannerStubSettings, clientContext);
414-
BuiltInMetricsConstant.DIRECT_PATH_ENABLED =
415-
((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath()
416-
&& isAttemptDirectPathXds;
422+
this.directPathEnabledSupplier =
423+
Suppliers.memoize(
424+
() -> {
425+
return ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath()
426+
&& isAttemptDirectPathXds;
427+
});
417428
this.readRetrySettings =
418429
options.getSpannerStubSettings().streamingReadSettings().getRetrySettings();
419430
this.readRetryableCodes =

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java

+7-2
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import com.google.cloud.spanner.CompositeTracer;
2929
import com.google.cloud.spanner.SpannerExceptionFactory;
3030
import com.google.cloud.spanner.SpannerRpcMetrics;
31+
import com.google.common.base.Supplier;
3132
import com.google.common.cache.Cache;
3233
import com.google.common.cache.CacheBuilder;
3334
import com.google.spanner.admin.database.v1.DatabaseName;
@@ -93,8 +94,12 @@ class HeaderInterceptor implements ClientInterceptor {
9394
private static final Level LEVEL = Level.INFO;
9495
private final SpannerRpcMetrics spannerRpcMetrics;
9596

96-
HeaderInterceptor(SpannerRpcMetrics spannerRpcMetrics) {
97+
private final Supplier<Boolean> directPathEnabledSupplier;
98+
99+
HeaderInterceptor(
100+
SpannerRpcMetrics spannerRpcMetrics, Supplier<Boolean> directPathEnabledSupplier) {
97101
this.spannerRpcMetrics = spannerRpcMetrics;
102+
this.directPathEnabledSupplier = directPathEnabledSupplier;
98103
}
99104

100105
@Override
@@ -230,7 +235,7 @@ private Map<String, String> getBuiltInMetricAttributes(String key, DatabaseName
230235
BuiltInMetricsConstant.INSTANCE_ID_KEY.getKey(), databaseName.getInstance());
231236
attributes.put(
232237
BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY.getKey(),
233-
String.valueOf(BuiltInMetricsConstant.DIRECT_PATH_ENABLED));
238+
String.valueOf(this.directPathEnabledSupplier.get()));
234239
return attributes;
235240
});
236241
}

google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java

+14-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import com.google.api.core.ObsoleteApi;
2020
import com.google.api.gax.grpc.GrpcInterceptorProvider;
2121
import com.google.cloud.spanner.SpannerRpcMetrics;
22+
import com.google.common.base.Supplier;
23+
import com.google.common.base.Suppliers;
2224
import com.google.common.collect.ImmutableList;
2325
import io.grpc.ClientInterceptor;
2426
import io.opentelemetry.api.GlobalOpenTelemetry;
@@ -46,11 +48,22 @@ public static SpannerInterceptorProvider createDefault() {
4648
}
4749

4850
public static SpannerInterceptorProvider createDefault(OpenTelemetry openTelemetry) {
51+
return createDefault(
52+
openTelemetry,
53+
Suppliers.memoize(
54+
() -> {
55+
return false;
56+
}));
57+
}
58+
59+
public static SpannerInterceptorProvider createDefault(
60+
OpenTelemetry openTelemetry, Supplier<Boolean> directPathEnabledSupplier) {
4961
List<ClientInterceptor> defaultInterceptorList = new ArrayList<>();
5062
defaultInterceptorList.add(new SpannerErrorInterceptor());
5163
defaultInterceptorList.add(
5264
new LoggingInterceptor(Logger.getLogger(GapicSpannerRpc.class.getName()), Level.FINER));
53-
defaultInterceptorList.add(new HeaderInterceptor(new SpannerRpcMetrics(openTelemetry)));
65+
defaultInterceptorList.add(
66+
new HeaderInterceptor(new SpannerRpcMetrics(openTelemetry), directPathEnabledSupplier));
5467
return new SpannerInterceptorProvider(ImmutableList.copyOf(defaultInterceptorList));
5568
}
5669

0 commit comments

Comments
 (0)