From 7bcd115371ce78908c2687d4492fa483e1bfd73d Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Tue, 21 Apr 2026 16:54:50 -0400 Subject: [PATCH 1/6] feat(datastore): Update default channel pool configs to handle initial bursts and scalability --- .../google/cloud/datastore/DatastoreOptions.java | 16 +++++++++++----- .../cloud/datastore/spi/v1/GrpcDatastoreRpc.java | 14 +++++++++----- .../cloud/datastore/DatastoreOptionsTest.java | 6 ++++++ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java index 461252ac2980..8d8580df9d0a 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java @@ -54,7 +54,9 @@ public class DatastoreOptions extends ServiceOptions channelConfigurator = diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java index cc5391dfee6a..89eec72342e8 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java @@ -27,6 +27,7 @@ import com.google.api.gax.grpc.ChannelPoolSettings; import com.google.api.gax.grpc.GrpcCallContext; import com.google.api.gax.grpc.GrpcTransportChannel; +import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.HeaderProvider; import com.google.api.gax.rpc.NoHeaderProvider; @@ -80,13 +81,16 @@ public GrpcDatastoreRpc(DatastoreOptions datastoreOptions) throws IOException { DatastoreStubSettings.newBuilder(clientContext) .applyToAllUnaryMethods(retrySettingSetter(datastoreOptions)); if (!isEmulator(datastoreOptions)) { + // Use the configured channel pool settings configured in the options. Datastore can + // make the assumption that this will always be a InstantiatingGrpcChannelProvider + // as the DatastoreOptions validates that the TransportChannelProvider is of the + // InstantiatingGrpcChannelProvider type + InstantiatingGrpcChannelProvider grpcChannelProvider = + (InstantiatingGrpcChannelProvider) datastoreOptions.getTransportChannelProvider(); + ChannelPoolSettings channelPoolSettings = grpcChannelProvider.getChannelPoolSettings(); datastoreStubSettingsBuilder.setTransportChannelProvider( DatastoreSettings.defaultGrpcTransportProviderBuilder() - .setChannelPoolSettings( - ChannelPoolSettings.builder() - .setInitialChannelCount(DatastoreOptions.INIT_CHANNEL_COUNT) - .setMinChannelCount(DatastoreOptions.MIN_CHANNEL_COUNT) - .build()) + .setChannelPoolSettings(channelPoolSettings) .build()); } diff --git a/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java b/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java index 9e1df1abe4ec..43b23293774c 100644 --- a/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java +++ b/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java @@ -187,6 +187,12 @@ public void testGrpcDefaultChannelConfigurations() { assertEquals(channelPoolSettings.getInitialChannelCount(), DatastoreOptions.INIT_CHANNEL_COUNT); assertEquals(channelPoolSettings.getMinChannelCount(), DatastoreOptions.MIN_CHANNEL_COUNT); assertEquals(channelPoolSettings.getMaxChannelCount(), DEFAULT_MAX_CHANNEL_COUNT); + assertEquals( + channelPoolSettings.getMaxResizeDelta(), + DatastoreOptions.CHANNEL_POOL_DEFAULT_RESIZE_DELTA); + assertEquals( + channelPoolSettings.getMaxRpcsPerChannel(), + DatastoreOptions.CHANNEL_POOL_MAX_RPCS_PER_CHANNEL); } @Test From 7bc97f7233901acb7a829bc9e40aaf77c1f73aba Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Tue, 21 Apr 2026 17:23:46 -0400 Subject: [PATCH 2/6] chore: Add ObsoleteApi annotation to unused public constant --- .../main/java/com/google/cloud/datastore/DatastoreOptions.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java index 8d8580df9d0a..3bd35d7d1678 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java @@ -20,6 +20,7 @@ import com.google.api.core.ApiFunction; import com.google.api.core.BetaApi; +import com.google.api.core.ObsoleteApi; import com.google.api.gax.grpc.ChannelPoolSettings; import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.rpc.TransportChannelProvider; @@ -58,6 +59,8 @@ public class DatastoreOptions extends ServiceOptions Date: Tue, 21 Apr 2026 17:28:11 -0400 Subject: [PATCH 3/6] chore: set new channel pool defaults as package-private --- .../java/com/google/cloud/datastore/DatastoreOptions.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java index 3bd35d7d1678..0e5d63220388 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java @@ -56,8 +56,8 @@ public class DatastoreOptions extends ServiceOptions Date: Tue, 21 Apr 2026 17:34:52 -0400 Subject: [PATCH 4/6] chore: Add comment to explain the CHANNEL_POOL_MAX_RPCS_PER_CHANNEL constant --- .../java/com/google/cloud/datastore/DatastoreOptions.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java index 0e5d63220388..38dfd2fd94f5 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java @@ -57,6 +57,10 @@ public class DatastoreOptions extends ServiceOptions Date: Wed, 22 Apr 2026 12:01:18 -0400 Subject: [PATCH 5/6] chore: Address PR feedback --- .../cloud/datastore/DatastoreOptions.java | 29 +++++++------------ .../datastore/spi/v1/GrpcDatastoreRpc.java | 16 +++------- 2 files changed, 14 insertions(+), 31 deletions(-) diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java index 38dfd2fd94f5..70d1c568ec95 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java @@ -18,7 +18,6 @@ import static com.google.cloud.datastore.Validator.validateNamespace; -import com.google.api.core.ApiFunction; import com.google.api.core.BetaApi; import com.google.api.core.ObsoleteApi; import com.google.api.gax.grpc.ChannelPoolSettings; @@ -38,7 +37,6 @@ import com.google.cloud.http.HttpTransportOptions; import com.google.common.base.MoreObjects; import com.google.common.collect.ImmutableSet; -import io.grpc.ManagedChannelBuilder; import java.io.IOException; import java.lang.reflect.Method; import java.util.Objects; @@ -57,15 +55,16 @@ public class DatastoreOptions extends ServiceOptions channelConfigurator = - this.traceUtil.getChannelConfigurator(); - if (channelConfigurator == null) { - this.channelProvider = - GrpcTransportOptions.setUpChannelProvider( - DatastoreSettings.defaultGrpcTransportProviderBuilder() - .setChannelPoolSettings(datastoreChannelPoolSettings), - this); - } else { + InstantiatingGrpcChannelProvider.Builder channelProviderBuilder = + DatastoreSettings.defaultGrpcTransportProviderBuilder() + .setChannelPoolSettings(datastoreChannelPoolSettings) + .setEndpoint(getHost()); + if (traceUtil.getChannelConfigurator() != null) { // Intercept the grpc channel calls to add telemetry info. - this.channelProvider = - GrpcTransportOptions.setUpChannelProvider( - DatastoreSettings.defaultGrpcTransportProviderBuilder() - .setChannelPoolSettings(datastoreChannelPoolSettings) - .setChannelConfigurator(channelConfigurator), - this); + channelProviderBuilder.setChannelConfigurator(traceUtil.getChannelConfigurator()); } + this.channelProvider = channelProviderBuilder.build(); } else { this.channelProvider = builder.channelProvider; } diff --git a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java index 89eec72342e8..f952dfdc9ef0 100644 --- a/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java +++ b/java-datastore/google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java @@ -24,10 +24,8 @@ import com.google.api.core.InternalApi; import com.google.api.gax.core.BackgroundResource; import com.google.api.gax.core.GaxProperties; -import com.google.api.gax.grpc.ChannelPoolSettings; import com.google.api.gax.grpc.GrpcCallContext; import com.google.api.gax.grpc.GrpcTransportChannel; -import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider; import com.google.api.gax.rpc.ClientContext; import com.google.api.gax.rpc.HeaderProvider; import com.google.api.gax.rpc.NoHeaderProvider; @@ -81,17 +79,11 @@ public GrpcDatastoreRpc(DatastoreOptions datastoreOptions) throws IOException { DatastoreStubSettings.newBuilder(clientContext) .applyToAllUnaryMethods(retrySettingSetter(datastoreOptions)); if (!isEmulator(datastoreOptions)) { - // Use the configured channel pool settings configured in the options. Datastore can - // make the assumption that this will always be a InstantiatingGrpcChannelProvider - // as the DatastoreOptions validates that the TransportChannelProvider is of the - // InstantiatingGrpcChannelProvider type - InstantiatingGrpcChannelProvider grpcChannelProvider = - (InstantiatingGrpcChannelProvider) datastoreOptions.getTransportChannelProvider(); - ChannelPoolSettings channelPoolSettings = grpcChannelProvider.getChannelPoolSettings(); + // Use the TransportChannelProvider configured in DatastoreOptions. For gRPC transport, this + // will + // be configured with a default ChannelPool configuration datastoreStubSettingsBuilder.setTransportChannelProvider( - DatastoreSettings.defaultGrpcTransportProviderBuilder() - .setChannelPoolSettings(channelPoolSettings) - .build()); + datastoreOptions.getTransportChannelProvider()); } datastoreStub = GrpcDatastoreStub.create(datastoreStubSettingsBuilder.build()); From 37b70fbef88222068a4307813b0a5b749eb1ff71 Mon Sep 17 00:00:00 2001 From: Lawrence Qiu Date: Wed, 22 Apr 2026 12:15:51 -0400 Subject: [PATCH 6/6] chore: Remove test for package-private resize delta getter --- .../java/com/google/cloud/datastore/DatastoreOptionsTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java b/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java index 43b23293774c..79e9ab965aa1 100644 --- a/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java +++ b/java-datastore/google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java @@ -187,9 +187,6 @@ public void testGrpcDefaultChannelConfigurations() { assertEquals(channelPoolSettings.getInitialChannelCount(), DatastoreOptions.INIT_CHANNEL_COUNT); assertEquals(channelPoolSettings.getMinChannelCount(), DatastoreOptions.MIN_CHANNEL_COUNT); assertEquals(channelPoolSettings.getMaxChannelCount(), DEFAULT_MAX_CHANNEL_COUNT); - assertEquals( - channelPoolSettings.getMaxResizeDelta(), - DatastoreOptions.CHANNEL_POOL_DEFAULT_RESIZE_DELTA); assertEquals( channelPoolSettings.getMaxRpcsPerChannel(), DatastoreOptions.CHANNEL_POOL_MAX_RPCS_PER_CHANNEL);