diff --git a/google-cloud-spanner/pom.xml b/google-cloud-spanner/pom.xml index 561483af40..907141d6e9 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/AbstractReadContext.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/AbstractReadContext.java index 67b0638f5d..35c4f20868 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. */ 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 0e540ea792..642f46c535 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; @@ -584,9 +585,24 @@ private static GcpManagedChannelOptions grpcGcpOptionsWithMetrics(SpannerOptions if (metricsOptions.getNamePrefix().equals("")) { metricsOptionsBuilder.withNamePrefix("cloud.google.com/java/spanner/gcp-channel-pool/"); } - return GcpManagedChannelOptions.newBuilder(grpcGcpOptions) - .withMetricsOptions(metricsOptionsBuilder.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")