From 6e2a79a559efcd57bfe71adc54a168a1e9a6e447 Mon Sep 17 00:00:00 2001 From: surbhigarg92 Date: Fri, 4 Oct 2024 14:20:16 +0530 Subject: [PATCH 1/4] chore: add directpath_enabled attribute --- .../cloud/spanner/BuiltInMetricsConstant.java | 1 + .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 30 +++++++++++-------- .../spanner/spi/v1/HeaderInterceptor.java | 3 ++ .../spanner/v1/stub/GrpcSpannerStub.java | 5 ++++ 4 files changed, 27 insertions(+), 12 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java index 4f8b091d550..f0596a1c20a 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java @@ -101,6 +101,7 @@ public class BuiltInMetricsConstant { DIRECT_PATH_ENABLED_KEY, DIRECT_PATH_USED_KEY); + public static boolean DIRECT_PATH_ENABLED; static Aggregation AGGREGATION_WITH_MILLIS_HISTOGRAM = Aggregation.explicitBucketHistogram( ImmutableList.of( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 2360b5d5173..e3bc407b775 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -29,6 +29,7 @@ import com.google.api.gax.grpc.GrpcCallContext; import com.google.api.gax.grpc.GrpcCallSettings; import com.google.api.gax.grpc.GrpcStubCallableFactory; +import com.google.api.gax.grpc.GrpcTransportChannel; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.longrunning.OperationFuture; import com.google.api.gax.retrying.ResultRetryAlgorithm; @@ -63,6 +64,7 @@ import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.spanner.AdminRequestsPerMinuteExceededException; import com.google.cloud.spanner.BackupId; +import com.google.cloud.spanner.BuiltInMetricsConstant; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.Restore; import com.google.cloud.spanner.SpannerException; @@ -396,18 +398,22 @@ public GapicSpannerRpc(final SpannerOptions options) { final String emulatorHost = System.getenv("SPANNER_EMULATOR_HOST"); try { - this.spannerStub = - GrpcSpannerStub.create( - options - .getSpannerStubSettings() - .toBuilder() - .setTransportChannelProvider(channelProvider) - .setCredentialsProvider(credentialsProvider) - .setStreamWatchdogProvider(watchdogProvider) - .setTracerFactory( - options.getApiTracerFactory( - /* isAdminClient = */ false, isEmulatorEnabled(options, emulatorHost))) - .build()); + SpannerStubSettings spannerStubSettings = + options + .getSpannerStubSettings() + .toBuilder() + .setTransportChannelProvider(channelProvider) + .setCredentialsProvider(credentialsProvider) + .setStreamWatchdogProvider(watchdogProvider) + .setTracerFactory( + options.getApiTracerFactory( + /* isAdminClient = */ false, isEmulatorEnabled(options, emulatorHost))) + .build(); + ClientContext clientContext = ClientContext.create(spannerStubSettings); + this.spannerStub = GrpcSpannerStub.create(spannerStubSettings, clientContext); + BuiltInMetricsConstant.DIRECT_PATH_ENABLED = + ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath() + && isAttemptDirectPathXds; this.readRetrySettings = options.getSpannerStubSettings().streamingReadSettings().getRetrySettings(); this.readRetryableCodes = diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java index dd414bed397..1bf41ee2523 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java @@ -228,6 +228,9 @@ private Map getBuiltInMetricAttributes(String key, DatabaseName attributes.put(BuiltInMetricsConstant.DATABASE_KEY.getKey(), databaseName.getDatabase()); attributes.put( BuiltInMetricsConstant.INSTANCE_ID_KEY.getKey(), databaseName.getInstance()); + attributes.put( + BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY.getKey(), + String.valueOf(BuiltInMetricsConstant.DIRECT_PATH_ENABLED)); return attributes; }); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java index 6d7cc8d0bc3..322e3130e83 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java @@ -247,6 +247,11 @@ public static final GrpcSpannerStub create(ClientContext clientContext) throws I return new GrpcSpannerStub(SpannerStubSettings.newBuilder().build(), clientContext); } + public static final GrpcSpannerStub create( + SpannerStubSettings settings, ClientContext clientContext) throws IOException { + return new GrpcSpannerStub(settings, clientContext); + } + public static final GrpcSpannerStub create( ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { return new GrpcSpannerStub( From 6ef36cb4fb4b31c63ade4ea35a6944a3cd6122ea Mon Sep 17 00:00:00 2001 From: surbhigarg92 Date: Fri, 15 Nov 2024 15:11:12 +0530 Subject: [PATCH 2/4] Created new grpc wrapper --- .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 6 ++-- .../spanner/v1/stub/GrpcSpannerStub.java | 5 --- .../v1/stub/GrpcSpannerStubWrapper.java | 33 +++++++++++++++++++ 3 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index e3bc407b775..8ae7b0c8579 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -80,7 +80,7 @@ import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStub; import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStubSettings; import com.google.cloud.spanner.encryption.EncryptionConfigProtoMapper; -import com.google.cloud.spanner.v1.stub.GrpcSpannerStub; +import com.google.cloud.spanner.v1.stub.GrpcSpannerStubWrapper; import com.google.cloud.spanner.v1.stub.SpannerStub; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.common.annotations.VisibleForTesting; @@ -410,7 +410,7 @@ public GapicSpannerRpc(final SpannerOptions options) { /* isAdminClient = */ false, isEmulatorEnabled(options, emulatorHost))) .build(); ClientContext clientContext = ClientContext.create(spannerStubSettings); - this.spannerStub = GrpcSpannerStub.create(spannerStubSettings, clientContext); + this.spannerStub = GrpcSpannerStubWrapper.create(spannerStubSettings, clientContext); BuiltInMetricsConstant.DIRECT_PATH_ENABLED = ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath() && isAttemptDirectPathXds; @@ -461,7 +461,7 @@ public GapicSpannerRpc(final SpannerOptions options) { .getStreamWatchdogProvider() .withCheckInterval(pdmlSettings.getStreamWatchdogCheckInterval())); } - this.partitionedDmlStub = GrpcSpannerStub.create(pdmlSettings.build()); + this.partitionedDmlStub = GrpcSpannerStubWrapper.create(pdmlSettings.build()); this.instanceAdminStubSettings = options .getInstanceAdminStubSettings() diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java index 322e3130e83..6d7cc8d0bc3 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStub.java @@ -247,11 +247,6 @@ public static final GrpcSpannerStub create(ClientContext clientContext) throws I return new GrpcSpannerStub(SpannerStubSettings.newBuilder().build(), clientContext); } - public static final GrpcSpannerStub create( - SpannerStubSettings settings, ClientContext clientContext) throws IOException { - return new GrpcSpannerStub(settings, clientContext); - } - public static final GrpcSpannerStub create( ClientContext clientContext, GrpcStubCallableFactory callableFactory) throws IOException { return new GrpcSpannerStub( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java new file mode 100644 index 00000000000..3a3943576bf --- /dev/null +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java @@ -0,0 +1,33 @@ +/* + * Copyright 2024 Google LLC + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner.v1.stub; + +import com.google.api.gax.rpc.ClientContext; +import java.io.IOException; + +public class GrpcSpannerStubWrapper extends GrpcSpannerStub { + + public static final GrpcSpannerStubWrapper create( + SpannerStubSettings settings, ClientContext clientContext) throws IOException { + return new GrpcSpannerStubWrapper(settings, clientContext); + } + + protected GrpcSpannerStubWrapper(SpannerStubSettings settings, ClientContext clientContext) + throws IOException { + super(settings, clientContext); + } +} From 88cdbfb03de1198232d035d4d914be1342dbb1b5 Mon Sep 17 00:00:00 2001 From: surbhigarg92 Date: Fri, 15 Nov 2024 15:11:12 +0530 Subject: [PATCH 3/4] Created new grpc wrapper --- .../cloud/spanner/BuiltInMetricsConstant.java | 1 - .../BuiltInOpenTelemetryMetricsProvider.java | 3 -- .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 29 ++++++++++++++----- ...StubWithStubSettingsAndClientContext.java} | 19 ++++++++---- .../spanner/spi/v1/HeaderInterceptor.java | 9 ++++-- .../spi/v1/SpannerInterceptorProvider.java | 15 +++++++++- ...OpenTelemetryBuiltInMetricsTracerTest.java | 1 - 7 files changed, 55 insertions(+), 22 deletions(-) rename google-cloud-spanner/src/main/java/com/google/cloud/spanner/{v1/stub/GrpcSpannerStubWrapper.java => spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java} (50%) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java index f0596a1c20a..4f8b091d550 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInMetricsConstant.java @@ -101,7 +101,6 @@ public class BuiltInMetricsConstant { DIRECT_PATH_ENABLED_KEY, DIRECT_PATH_USED_KEY); - public static boolean DIRECT_PATH_ENABLED; static Aggregation AGGREGATION_WITH_MILLIS_HISTOGRAM = Aggregation.explicitBucketHistogram( ImmutableList.of( diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java index ef1d70eec25..9367c45b636 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/BuiltInOpenTelemetryMetricsProvider.java @@ -20,7 +20,6 @@ import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_HASH_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_NAME_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.CLIENT_UID_KEY; -import static com.google.cloud.spanner.BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.INSTANCE_CONFIG_ID_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.LOCATION_ID_KEY; import static com.google.cloud.spanner.BuiltInMetricsConstant.PROJECT_ID_KEY; @@ -83,8 +82,6 @@ Map createClientAttributes(String projectId, String client_name) Map clientAttributes = new HashMap<>(); clientAttributes.put(LOCATION_ID_KEY.getKey(), detectClientLocation()); clientAttributes.put(PROJECT_ID_KEY.getKey(), projectId); - // TODO: Replace this with real value. - clientAttributes.put(DIRECT_PATH_ENABLED_KEY.getKey(), "false"); clientAttributes.put(INSTANCE_CONFIG_ID_KEY.getKey(), "unknown"); clientAttributes.put(CLIENT_NAME_KEY.getKey(), client_name); String clientUid = getDefaultTaskValue(); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 8ae7b0c8579..32741ad0f99 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -64,7 +64,6 @@ import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.spanner.AdminRequestsPerMinuteExceededException; import com.google.cloud.spanner.BackupId; -import com.google.cloud.spanner.BuiltInMetricsConstant; import com.google.cloud.spanner.ErrorCode; import com.google.cloud.spanner.Restore; import com.google.cloud.spanner.SpannerException; @@ -80,13 +79,14 @@ import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStub; import com.google.cloud.spanner.admin.instance.v1.stub.InstanceAdminStubSettings; import com.google.cloud.spanner.encryption.EncryptionConfigProtoMapper; -import com.google.cloud.spanner.v1.stub.GrpcSpannerStubWrapper; import com.google.cloud.spanner.v1.stub.SpannerStub; import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; import com.google.common.base.MoreObjects; import com.google.common.base.Preconditions; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.io.Resources; @@ -278,6 +278,11 @@ public class GapicSpannerRpc implements SpannerRpc { private final int numChannels; private final boolean isGrpcGcpExtensionEnabled; + private Supplier directPathEnabledSupplier = + () -> { + return false; + };; + public static GapicSpannerRpc create(SpannerOptions options) { return new GapicSpannerRpc(options); } @@ -353,7 +358,9 @@ public GapicSpannerRpc(final SpannerOptions options) { SpannerInterceptorProvider.create( MoreObjects.firstNonNull( options.getInterceptorProvider(), - SpannerInterceptorProvider.createDefault(options.getOpenTelemetry()))) + SpannerInterceptorProvider.createDefault( + options.getOpenTelemetry(), + (() -> directPathEnabledSupplier.get())))) // This sets the trace context headers. .withTraceContext(endToEndTracingEnabled, options.getOpenTelemetry()) // This sets the response compressor (Server -> Client). @@ -410,10 +417,15 @@ public GapicSpannerRpc(final SpannerOptions options) { /* isAdminClient = */ false, isEmulatorEnabled(options, emulatorHost))) .build(); ClientContext clientContext = ClientContext.create(spannerStubSettings); - this.spannerStub = GrpcSpannerStubWrapper.create(spannerStubSettings, clientContext); - BuiltInMetricsConstant.DIRECT_PATH_ENABLED = - ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath() - && isAttemptDirectPathXds; + this.spannerStub = + GrpcSpannerStubWithStubSettingsAndClientContext.create( + spannerStubSettings, clientContext); + this.directPathEnabledSupplier = + Suppliers.memoize( + () -> { + return ((GrpcTransportChannel) clientContext.getTransportChannel()).isDirectPath() + && isAttemptDirectPathXds; + }); this.readRetrySettings = options.getSpannerStubSettings().streamingReadSettings().getRetrySettings(); this.readRetryableCodes = @@ -461,7 +473,8 @@ public GapicSpannerRpc(final SpannerOptions options) { .getStreamWatchdogProvider() .withCheckInterval(pdmlSettings.getStreamWatchdogCheckInterval())); } - this.partitionedDmlStub = GrpcSpannerStubWrapper.create(pdmlSettings.build()); + this.partitionedDmlStub = + GrpcSpannerStubWithStubSettingsAndClientContext.create(pdmlSettings.build()); this.instanceAdminStubSettings = options .getInstanceAdminStubSettings() diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java similarity index 50% rename from google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java rename to google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java index 3a3943576bf..8e5a9e62e61 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/v1/stub/GrpcSpannerStubWrapper.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java @@ -14,20 +14,27 @@ * limitations under the License. */ -package com.google.cloud.spanner.v1.stub; +package com.google.cloud.spanner.spi.v1; import com.google.api.gax.rpc.ClientContext; +import com.google.cloud.spanner.v1.stub.GrpcSpannerStub; +import com.google.cloud.spanner.v1.stub.SpannerStubSettings; import java.io.IOException; -public class GrpcSpannerStubWrapper extends GrpcSpannerStub { +/** + * Wrapper around {@link GrpcSpannerStub} to make the constructor available inside this package. + * This makes it possible to create a {@link GrpcSpannerStub} with a {@link SpannerStubSettings} and + * a {@link ClientContext}. + */ +class GrpcSpannerStubWithStubSettingsAndClientContext extends GrpcSpannerStub { - public static final GrpcSpannerStubWrapper create( + public static final GrpcSpannerStubWithStubSettingsAndClientContext create( SpannerStubSettings settings, ClientContext clientContext) throws IOException { - return new GrpcSpannerStubWrapper(settings, clientContext); + return new GrpcSpannerStubWithStubSettingsAndClientContext(settings, clientContext); } - protected GrpcSpannerStubWrapper(SpannerStubSettings settings, ClientContext clientContext) - throws IOException { + protected GrpcSpannerStubWithStubSettingsAndClientContext( + SpannerStubSettings settings, ClientContext clientContext) throws IOException { super(settings, clientContext); } } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java index 1bf41ee2523..026f9b4ca9d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/HeaderInterceptor.java @@ -28,6 +28,7 @@ import com.google.cloud.spanner.CompositeTracer; import com.google.cloud.spanner.SpannerExceptionFactory; import com.google.cloud.spanner.SpannerRpcMetrics; +import com.google.common.base.Supplier; import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; import com.google.spanner.admin.database.v1.DatabaseName; @@ -93,8 +94,12 @@ class HeaderInterceptor implements ClientInterceptor { private static final Level LEVEL = Level.INFO; private final SpannerRpcMetrics spannerRpcMetrics; - HeaderInterceptor(SpannerRpcMetrics spannerRpcMetrics) { + private final Supplier directPathEnabledSupplier; + + HeaderInterceptor( + SpannerRpcMetrics spannerRpcMetrics, Supplier directPathEnabledSupplier) { this.spannerRpcMetrics = spannerRpcMetrics; + this.directPathEnabledSupplier = directPathEnabledSupplier; } @Override @@ -230,7 +235,7 @@ private Map getBuiltInMetricAttributes(String key, DatabaseName BuiltInMetricsConstant.INSTANCE_ID_KEY.getKey(), databaseName.getInstance()); attributes.put( BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY.getKey(), - String.valueOf(BuiltInMetricsConstant.DIRECT_PATH_ENABLED)); + String.valueOf(this.directPathEnabledSupplier.get())); return attributes; }); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java index b4d28ef0789..c3c05b8af15 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/SpannerInterceptorProvider.java @@ -19,6 +19,8 @@ import com.google.api.core.ObsoleteApi; import com.google.api.gax.grpc.GrpcInterceptorProvider; import com.google.cloud.spanner.SpannerRpcMetrics; +import com.google.common.base.Supplier; +import com.google.common.base.Suppliers; import com.google.common.collect.ImmutableList; import io.grpc.ClientInterceptor; import io.opentelemetry.api.GlobalOpenTelemetry; @@ -46,11 +48,22 @@ public static SpannerInterceptorProvider createDefault() { } public static SpannerInterceptorProvider createDefault(OpenTelemetry openTelemetry) { + return createDefault( + openTelemetry, + Suppliers.memoize( + () -> { + return false; + })); + } + + public static SpannerInterceptorProvider createDefault( + OpenTelemetry openTelemetry, Supplier directPathEnabledSupplier) { List defaultInterceptorList = new ArrayList<>(); defaultInterceptorList.add(new SpannerErrorInterceptor()); defaultInterceptorList.add( new LoggingInterceptor(Logger.getLogger(GapicSpannerRpc.class.getName()), Level.FINER)); - defaultInterceptorList.add(new HeaderInterceptor(new SpannerRpcMetrics(openTelemetry))); + defaultInterceptorList.add( + new HeaderInterceptor(new SpannerRpcMetrics(openTelemetry), directPathEnabledSupplier)); return new SpannerInterceptorProvider(ImmutableList.copyOf(defaultInterceptorList)); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java index b493e36c966..9f65402c31f 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/OpenTelemetryBuiltInMetricsTracerTest.java @@ -94,7 +94,6 @@ public static void setup() { Attributes.builder() .put(BuiltInMetricsConstant.PROJECT_ID_KEY, "test-project") .put(BuiltInMetricsConstant.INSTANCE_CONFIG_ID_KEY, "unknown") - .put(BuiltInMetricsConstant.DIRECT_PATH_ENABLED_KEY, "false") .put( BuiltInMetricsConstant.LOCATION_ID_KEY, BuiltInOpenTelemetryMetricsProvider.detectClientLocation()) From fb4215dc887401f8324ca04e410b37a471ef13c2 Mon Sep 17 00:00:00 2001 From: surbhigarg92 Date: Tue, 19 Nov 2024 10:04:42 +0530 Subject: [PATCH 4/4] review comments --- .../com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java | 5 +---- .../v1/GrpcSpannerStubWithStubSettingsAndClientContext.java | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java index 32741ad0f99..fe23b097982 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java @@ -278,10 +278,7 @@ public class GapicSpannerRpc implements SpannerRpc { private final int numChannels; private final boolean isGrpcGcpExtensionEnabled; - private Supplier directPathEnabledSupplier = - () -> { - return false; - };; + private Supplier directPathEnabledSupplier = () -> false; public static GapicSpannerRpc create(SpannerOptions options) { return new GapicSpannerRpc(options); diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java index 8e5a9e62e61..6c575e1074c 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/spi/v1/GrpcSpannerStubWithStubSettingsAndClientContext.java @@ -28,7 +28,7 @@ */ class GrpcSpannerStubWithStubSettingsAndClientContext extends GrpcSpannerStub { - public static final GrpcSpannerStubWithStubSettingsAndClientContext create( + static final GrpcSpannerStubWithStubSettingsAndClientContext create( SpannerStubSettings settings, ClientContext clientContext) throws IOException { return new GrpcSpannerStubWithStubSettingsAndClientContext(settings, clientContext); }