From 036dbfd22662d035ea3197ee1982fd53893a1c4d Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Sat, 8 Mar 2025 11:37:21 +0000 Subject: [PATCH 1/3] chore(spanner): enable dynamic channel pooling by default --- google-cloud-spanner/pom.xml | 1 + .../java/com/google/cloud/spanner/spi/v1/GapicSpannerRpc.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index a460cc33735..cf7e049501d 100644 --- a/google-cloud-spanner/pom.xml +++ b/google-cloud-spanner/pom.xml @@ -162,6 +162,7 @@ com.google.cloud grpc-gcp + 1.6.2-SNAPSHOT io.grpc 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 77ce3a540b8..cd419afe42c 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 @@ -60,6 +60,7 @@ import com.google.cloud.grpc.GcpManagedChannel; import com.google.cloud.grpc.GcpManagedChannelBuilder; import com.google.cloud.grpc.GcpManagedChannelOptions; +import com.google.cloud.grpc.GcpManagedChannelOptions.GcpChannelPoolOptions; import com.google.cloud.grpc.GcpManagedChannelOptions.GcpMetricsOptions; import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.spanner.AdminRequestsPerMinuteExceededException; @@ -589,8 +590,11 @@ private static GcpManagedChannelOptions grpcGcpOptionsWithMetrics(SpannerOptions if (metricsOptions.getNamePrefix().equals("")) { metricsOptionsBuilder.withNamePrefix("cloud.google.com/java/spanner/gcp-channel-pool/"); } + GcpChannelPoolOptions.Builder channelPoolOptionsBuilder = + GcpChannelPoolOptions.newBuilder().setDynamicScaling(0, 100, Duration.ofMinutes(30L)); return GcpManagedChannelOptions.newBuilder(grpcGcpOptions) .withMetricsOptions(metricsOptionsBuilder.build()) + .withChannelPoolOptions(channelPoolOptionsBuilder.build()) .build(); } From e1e23b8d3c42d6df457f019e826748269935fa62 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Wed, 12 Mar 2025 11:35:41 +0000 Subject: [PATCH 2/3] chore(spanner): enable dynamic channel pooling by default when mux is turned on --- .../cloud/spanner/spi/v1/GapicSpannerRpc.java | 24 ++++++++++++++----- 1 file changed, 18 insertions(+), 6 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 cd419afe42c..441c513a3b8 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 @@ -590,12 +590,24 @@ private static GcpManagedChannelOptions grpcGcpOptionsWithMetrics(SpannerOptions if (metricsOptions.getNamePrefix().equals("")) { metricsOptionsBuilder.withNamePrefix("cloud.google.com/java/spanner/gcp-channel-pool/"); } - GcpChannelPoolOptions.Builder channelPoolOptionsBuilder = - GcpChannelPoolOptions.newBuilder().setDynamicScaling(0, 100, Duration.ofMinutes(30L)); - return GcpManagedChannelOptions.newBuilder(grpcGcpOptions) - .withMetricsOptions(metricsOptionsBuilder.build()) - .withChannelPoolOptions(channelPoolOptionsBuilder.build()) - .build(); + GcpManagedChannelOptions.Builder channelOptionsBuilder = + GcpManagedChannelOptions.newBuilder(grpcGcpOptions) + .withMetricsOptions(metricsOptionsBuilder.build()); + + boolean isMultiplexedSessionEnabledForAllTransactions = + options.getSessionPoolOptions().getUseMultiplexedSession() + && options.getSessionPoolOptions().getUseMultiplexedSessionForRW() + && options.getSessionPoolOptions().getUseMultiplexedSessionPartitionedOps(); + if (isMultiplexedSessionEnabledForAllTransactions) { + // When multiplexed session is enabled for all the transactions then enable dynamic channel + // pooling by default. + // TODO: What if backend throws an unimplemented error and the transactions fallback to using + // regular sessions? Is there a way to disable dynamic scaling on the fly? + GcpChannelPoolOptions.Builder channelPoolOptionsBuilder = + GcpChannelPoolOptions.newBuilder().setDynamicScaling(0, 100, Duration.ofMinutes(30L)); + channelOptionsBuilder.withChannelPoolOptions(channelPoolOptionsBuilder.build()); + } + return channelOptionsBuilder.build(); } @SuppressWarnings("rawtypes") From d9356405a973813d9f1e65fd928b92bef2bab301 Mon Sep 17 00:00:00 2001 From: Sri Harsha CH Date: Sun, 10 Aug 2025 12:27:53 +0530 Subject: [PATCH 3/3] chore: lint --- .../main/java/com/google/cloud/spanner/AbstractReadContext.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java index 67b0638f5d9..35c4f20868d 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java @@ -62,7 +62,7 @@ import javax.annotation.Nullable; import javax.annotation.concurrent.GuardedBy; -/** +/** * Abstract base class for all {@link ReadContext}s + concrete implementations of read-only {@link * ReadContext}s. */