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")