Skip to content

Commit 7ba4531

Browse files
authored
feat: Improve upon the default gRPC Connection Pool size (#1706)
* feat: Improve upon the default gRPC Connection Pool size * feat: Improve upon the default gRPC Connection Pool size * fix formatting * add comment * Add test * formatting * Add constants for min, max and init channel count * Fix ci testing environment with java 11 * Revert "Fix ci testing environment with java 11" This reverts commit 00c0d21.
1 parent 4a18ad2 commit 7ba4531

File tree

3 files changed

+44
-1
lines changed

3 files changed

+44
-1
lines changed

google-cloud-datastore/src/main/java/com/google/cloud/datastore/DatastoreOptions.java

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import static com.google.cloud.datastore.Validator.validateNamespace;
2020

2121
import com.google.api.core.BetaApi;
22+
import com.google.api.gax.grpc.ChannelPoolSettings;
2223
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2324
import com.google.api.gax.rpc.TransportChannelProvider;
2425
import com.google.cloud.ServiceDefaults;
@@ -50,6 +51,9 @@ public class DatastoreOptions extends ServiceOptions<Datastore, DatastoreOptions
5051
private static final String DEFAULT_DATABASE_ID = "";
5152
public static final String PROJECT_ID_ENV_VAR = "DATASTORE_PROJECT_ID";
5253
public static final String LOCAL_HOST_ENV_VAR = "DATASTORE_EMULATOR_HOST";
54+
public static final int INIT_CHANNEL_COUNT = 1;
55+
public static final int MIN_CHANNEL_COUNT = 1;
56+
public static final int MAX_CHANNEL_COUNT = 4;
5357

5458
private transient TransportChannelProvider channelProvider = null;
5559

@@ -218,11 +222,20 @@ private DatastoreOptions(Builder builder) {
218222
throw new IllegalArgumentException(
219223
"Only gRPC transport allows setting of channel provider or credentials provider");
220224
} else if (getTransportOptions() instanceof GrpcTransportOptions) {
225+
// For grpc transport options, configure default gRPC Connection pool with minChannelCount = 1
226+
// and maxChannelCount = 4
221227
this.channelProvider =
222228
builder.channelProvider != null
223229
? builder.channelProvider
224230
: GrpcTransportOptions.setUpChannelProvider(
225-
DatastoreSettings.defaultGrpcTransportProviderBuilder(), this);
231+
DatastoreSettings.defaultGrpcTransportProviderBuilder()
232+
.setChannelPoolSettings(
233+
ChannelPoolSettings.builder()
234+
.setInitialChannelCount(INIT_CHANNEL_COUNT)
235+
.setMinChannelCount(MIN_CHANNEL_COUNT)
236+
.setMaxChannelCount(MAX_CHANNEL_COUNT)
237+
.build()),
238+
this);
226239
}
227240
}
228241

google-cloud-datastore/src/main/java/com/google/cloud/datastore/spi/v1/GrpcDatastoreRpc.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import com.google.api.core.InternalApi;
2525
import com.google.api.gax.core.BackgroundResource;
2626
import com.google.api.gax.core.GaxProperties;
27+
import com.google.api.gax.grpc.ChannelPoolSettings;
2728
import com.google.api.gax.grpc.GrpcCallContext;
2829
import com.google.api.gax.grpc.GrpcTransportChannel;
2930
import com.google.api.gax.rpc.ClientContext;
@@ -74,9 +75,19 @@ public GrpcDatastoreRpc(DatastoreOptions datastoreOptions) throws IOException {
7475
? getClientContextForEmulator(datastoreOptions)
7576
: getClientContext(datastoreOptions);
7677

78+
/* For grpc transport options, configure default gRPC Connection pool with minChannelCount = 1 and maxChannelCount = 4 */
7779
DatastoreStubSettings datastoreStubSettings =
7880
DatastoreStubSettings.newBuilder(clientContext)
7981
.applyToAllUnaryMethods(retrySettingSetter(datastoreOptions))
82+
.setTransportChannelProvider(
83+
DatastoreSettings.defaultGrpcTransportProviderBuilder()
84+
.setChannelPoolSettings(
85+
ChannelPoolSettings.builder()
86+
.setInitialChannelCount(DatastoreOptions.INIT_CHANNEL_COUNT)
87+
.setMinChannelCount(DatastoreOptions.MIN_CHANNEL_COUNT)
88+
.setMaxChannelCount(DatastoreOptions.MAX_CHANNEL_COUNT)
89+
.build())
90+
.build())
8091
.build();
8192
datastoreStub = GrpcDatastoreStub.create(datastoreStubSettings);
8293
} catch (IOException e) {

google-cloud-datastore/src/test/java/com/google/cloud/datastore/DatastoreOptionsTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,25 @@ public void testDatastore() {
103103
assertSame(datastoreRpc, options.build().getRpc());
104104
}
105105

106+
@Test
107+
public void testGrpcDefaultChannelConfigurations() {
108+
DatastoreOptions datastoreOptions =
109+
DatastoreOptions.newBuilder()
110+
.setServiceRpcFactory(datastoreRpcFactory)
111+
.setProjectId(PROJECT_ID)
112+
.setDatabaseId(DATABASE_ID)
113+
.setTransportOptions(GrpcTransportOptions.newBuilder().build())
114+
.setCredentials(NoCredentials.getInstance())
115+
.setHost("http://localhost:" + PORT)
116+
.build();
117+
ChannelPoolSettings channelPoolSettings =
118+
((InstantiatingGrpcChannelProvider) datastoreOptions.getTransportChannelProvider())
119+
.getChannelPoolSettings();
120+
assertEquals(channelPoolSettings.getInitialChannelCount(), DatastoreOptions.INIT_CHANNEL_COUNT);
121+
assertEquals(channelPoolSettings.getMinChannelCount(), DatastoreOptions.MIN_CHANNEL_COUNT);
122+
assertEquals(channelPoolSettings.getMaxChannelCount(), DatastoreOptions.MAX_CHANNEL_COUNT);
123+
}
124+
106125
@Test
107126
public void testCustomChannelAndCredentials() {
108127
InstantiatingGrpcChannelProvider channelProvider =

0 commit comments

Comments
 (0)