Skip to content

Commit 1239a68

Browse files
feat(jdbc): enable gRPC Keep-Alive for Storage Read API (#4093)
* feat(jdbc): enable gRPC Keep-Alive for Storage Read API * test(jdbc): add unit test for gRPC Keep-Alive configuration * chore: fix dependency * fix: unit tests * fix: use `java.time.Duration` instead of `threetenbp`
1 parent 0966b14 commit 1239a68

File tree

2 files changed

+40
-2
lines changed

2 files changed

+40
-2
lines changed

google-cloud-bigquery-jdbc/src/main/java/com/google/cloud/bigquery/jdbc/BigQueryConnection.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import com.google.api.gax.core.CredentialsProvider;
2020
import com.google.api.gax.core.FixedCredentialsProvider;
21+
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2122
import com.google.api.gax.retrying.RetrySettings;
2223
import com.google.api.gax.rpc.FixedHeaderProvider;
2324
import com.google.api.gax.rpc.HeaderProvider;
@@ -1053,10 +1054,23 @@ private BigQueryReadClient getBigQueryReadClientConnection() throws IOException
10531054
if (this.universeDomain != null) {
10541055
bigQueryReadSettings.setUniverseDomain(this.universeDomain);
10551056
}
1056-
if (this.transportChannelProvider != null) {
1057-
bigQueryReadSettings.setTransportChannelProvider(this.transportChannelProvider);
1057+
TransportChannelProvider activeProvider = this.transportChannelProvider;
1058+
if (activeProvider == null) {
1059+
activeProvider = BigQueryReadSettings.defaultGrpcTransportProviderBuilder().build();
1060+
}
1061+
1062+
if (activeProvider instanceof InstantiatingGrpcChannelProvider) {
1063+
activeProvider =
1064+
((InstantiatingGrpcChannelProvider) activeProvider)
1065+
.toBuilder()
1066+
.setKeepAliveTimeDuration(java.time.Duration.ofSeconds(10))
1067+
.setKeepAliveTimeoutDuration(java.time.Duration.ofSeconds(5))
1068+
.setKeepAliveWithoutCalls(true)
1069+
.build();
10581070
}
10591071

1072+
bigQueryReadSettings.setTransportChannelProvider(activeProvider);
1073+
10601074
return BigQueryReadClient.create(bigQueryReadSettings.build());
10611075
}
10621076

google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryConnectionTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,11 @@
1818

1919
import static org.junit.Assert.*;
2020

21+
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2122
import com.google.api.gax.rpc.HeaderProvider;
23+
import com.google.api.gax.rpc.TransportChannelProvider;
2224
import com.google.cloud.bigquery.exception.BigQueryJdbcException;
25+
import com.google.cloud.bigquery.storage.v1.BigQueryReadClient;
2326
import com.google.cloud.bigquery.storage.v1.BigQueryWriteClient;
2427
import java.io.IOException;
2528
import java.io.InputStream;
@@ -340,4 +343,25 @@ public void testMetaDataFetchThreadCountProperty() throws SQLException, IOExcept
340343
connectionCustom.getMetadataFetchThreadCount());
341344
}
342345
}
346+
347+
@Test
348+
public void testBigQueryReadClientKeepAliveSettings() throws SQLException, IOException {
349+
String url =
350+
"jdbc:bigquery://https://www.googleapis.com/bigquery/v2:443;"
351+
+ "OAuthType=2;ProjectId=MyBigQueryProject;"
352+
+ "OAuthAccessToken=redactedToken;OAuthClientId=redactedToken;"
353+
+ "OAuthClientSecret=redactedToken;";
354+
try (BigQueryConnection connection = new BigQueryConnection(url)) {
355+
BigQueryReadClient readClient = connection.getBigQueryReadClient();
356+
assertNotNull(readClient);
357+
358+
TransportChannelProvider provider = readClient.getSettings().getTransportChannelProvider();
359+
assertTrue(provider instanceof InstantiatingGrpcChannelProvider);
360+
361+
InstantiatingGrpcChannelProvider grpcProvider = (InstantiatingGrpcChannelProvider) provider;
362+
assertEquals(java.time.Duration.ofSeconds(10), grpcProvider.getKeepAliveTimeDuration());
363+
assertEquals(java.time.Duration.ofSeconds(5), grpcProvider.getKeepAliveTimeoutDuration());
364+
assertTrue(grpcProvider.getKeepAliveWithoutCalls());
365+
}
366+
}
343367
}

0 commit comments

Comments
 (0)