Skip to content

Commit 66db8fe

Browse files
fix: Allow StreamWriter settings to override passed in BQ client setting (#2001)
* . * fix: If client is provided, allow BQ client settings to be overridable * . * . * . * . * 🦉 Updates from OwlBot post-processor See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --------- Co-authored-by: Owl Bot <gcf-owl-bot[bot]@users.noreply.github.com>
1 parent f03ffc7 commit 66db8fe

3 files changed

Lines changed: 115 additions & 19 deletions

File tree

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,20 +49,20 @@ If you are using Maven without BOM, add this to your dependencies:
4949
If you are using Gradle 5.x or later, add this to your dependencies:
5050

5151
```Groovy
52-
implementation platform('com.google.cloud:libraries-bom:26.8.0')
52+
implementation platform('com.google.cloud:libraries-bom:26.9.0')
5353
5454
implementation 'com.google.cloud:google-cloud-bigquerystorage'
5555
```
5656
If you are using Gradle without BOM, add this to your dependencies:
5757

5858
```Groovy
59-
implementation 'com.google.cloud:google-cloud-bigquerystorage:2.32.0'
59+
implementation 'com.google.cloud:google-cloud-bigquerystorage:2.32.1'
6060
```
6161

6262
If you are using SBT, add this to your dependencies:
6363

6464
```Scala
65-
libraryDependencies += "com.google.cloud" % "google-cloud-bigquerystorage" % "2.32.0"
65+
libraryDependencies += "com.google.cloud" % "google-cloud-bigquerystorage" % "2.32.1"
6666
```
6767

6868
## Authentication

google-cloud-bigquerystorage/src/main/java/com/google/cloud/bigquery/storage/v1/StreamWriter.java

Lines changed: 34 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -308,17 +308,37 @@ static boolean isDefaultStream(String streamName) {
308308
return streamMatcher.find();
309309
}
310310

311-
private BigQueryWriteSettings getBigQueryWriteSettings(Builder builder) throws IOException {
311+
static BigQueryWriteSettings getBigQueryWriteSettings(Builder builder) throws IOException {
312+
BigQueryWriteSettings.Builder settingsBuilder = null;
312313
if (builder.client != null) {
313-
return builder.client.getSettings();
314+
settingsBuilder = builder.client.getSettings().toBuilder();
314315
} else {
315-
return BigQueryWriteSettings.newBuilder()
316-
.setCredentialsProvider(builder.credentialsProvider)
317-
.setTransportChannelProvider(builder.channelProvider)
318-
.setBackgroundExecutorProvider(builder.executorProvider)
319-
.setEndpoint(builder.endpoint)
320-
.build();
316+
settingsBuilder =
317+
new BigQueryWriteSettings.Builder()
318+
.setTransportChannelProvider(
319+
BigQueryWriteSettings.defaultGrpcTransportProviderBuilder()
320+
.setChannelsPerCpu(1)
321+
.build())
322+
.setCredentialsProvider(
323+
BigQueryWriteSettings.defaultCredentialsProviderBuilder().build())
324+
.setBackgroundExecutorProvider(
325+
BigQueryWriteSettings.defaultExecutorProviderBuilder().build())
326+
.setEndpoint(BigQueryWriteSettings.getDefaultEndpoint());
321327
}
328+
if (builder.channelProvider != null) {
329+
settingsBuilder.setTransportChannelProvider(builder.channelProvider);
330+
}
331+
if (builder.credentialsProvider != null) {
332+
settingsBuilder.setCredentialsProvider(builder.credentialsProvider);
333+
}
334+
if (builder.executorProvider != null) {
335+
settingsBuilder.setBackgroundExecutorProvider(builder.executorProvider);
336+
}
337+
if (builder.endpoint != null) {
338+
settingsBuilder.setEndpoint(builder.endpoint);
339+
}
340+
341+
return settingsBuilder.build();
322342
}
323343

324344
// Validate whether the fetched connection pool matched certain properties.
@@ -542,16 +562,13 @@ public static final class Builder {
542562

543563
private long maxInflightBytes = DEFAULT_MAX_INFLIGHT_BYTES;
544564

545-
private String endpoint = BigQueryWriteSettings.getDefaultEndpoint();
565+
private String endpoint = null;
546566

547-
private TransportChannelProvider channelProvider =
548-
BigQueryWriteSettings.defaultGrpcTransportProviderBuilder().setChannelsPerCpu(1).build();
567+
private TransportChannelProvider channelProvider = null;
549568

550-
private CredentialsProvider credentialsProvider =
551-
BigQueryWriteSettings.defaultCredentialsProviderBuilder().build();
569+
private CredentialsProvider credentialsProvider = null;
552570

553-
private ExecutorProvider executorProvider =
554-
BigQueryWriteSettings.defaultExecutorProviderBuilder().build();
571+
private ExecutorProvider executorProvider = null;
555572

556573
private FlowController.LimitExceededBehavior limitExceededBehavior =
557574
FlowController.LimitExceededBehavior.Block;
@@ -633,7 +650,8 @@ public Builder setCredentialsProvider(CredentialsProvider credentialsProvider) {
633650

634651
/** {@code ExecutorProvider} to use to create Executor to run background jobs. */
635652
public Builder setExecutorProvider(ExecutorProvider executorProvider) {
636-
this.executorProvider = executorProvider;
653+
this.executorProvider =
654+
Preconditions.checkNotNull(executorProvider, "ExecutorProvider is null.");
637655
return this;
638656
}
639657

google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1/StreamWriterTest.java

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@
2525
import com.google.api.core.ApiFutureCallback;
2626
import com.google.api.core.ApiFutures;
2727
import com.google.api.gax.batching.FlowController;
28+
import com.google.api.gax.core.GoogleCredentialsProvider;
29+
import com.google.api.gax.core.InstantiatingExecutorProvider;
2830
import com.google.api.gax.core.NoCredentialsProvider;
31+
import com.google.api.gax.grpc.InstantiatingGrpcChannelProvider;
2932
import com.google.api.gax.grpc.testing.MockGrpcService;
3033
import com.google.api.gax.grpc.testing.MockServiceHelper;
3134
import com.google.api.gax.rpc.AbortedException;
@@ -1366,4 +1369,79 @@ public void testStreamWriterPermanentErrorNoMultiplexing() throws Exception {
13661369
assertTrue(ex.getCause() instanceof InvalidArgumentException);
13671370
assertFalse(writer.isUserClosed());
13681371
}
1372+
1373+
@Test(timeout = 10000)
1374+
public void testBuilderDefaultSetting() throws Exception {
1375+
StreamWriter.Builder writerBuilder = StreamWriter.newBuilder(TEST_STREAM_1);
1376+
BigQueryWriteSettings writeSettings = StreamWriter.getBigQueryWriteSettings(writerBuilder);
1377+
assertEquals(
1378+
BigQueryWriteSettings.defaultExecutorProviderBuilder().build().toString(),
1379+
writeSettings.getBackgroundExecutorProvider().toString());
1380+
assertEquals(
1381+
BigQueryWriteSettings.defaultCredentialsProviderBuilder().build().toString(),
1382+
writeSettings.getCredentialsProvider().toString());
1383+
assertTrue(
1384+
writeSettings.getTransportChannelProvider() instanceof InstantiatingGrpcChannelProvider);
1385+
assertEquals(
1386+
BigQueryWriteSettings.getDefaultEndpoint(), writeSettings.getEndpoint().toString());
1387+
}
1388+
1389+
@Test(timeout = 10000)
1390+
public void testBuilderExplicitSetting() throws Exception {
1391+
// Client has special seetings.
1392+
BigQueryWriteSettings clientSettings =
1393+
BigQueryWriteSettings.newBuilder()
1394+
.setEndpoint("xxx:345")
1395+
.setBackgroundExecutorProvider(
1396+
InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(4).build())
1397+
.setTransportChannelProvider(serviceHelper.createChannelProvider())
1398+
.setCredentialsProvider(NoCredentialsProvider.create())
1399+
.build();
1400+
BigQueryWriteClient client = BigQueryWriteClient.create(clientSettings);
1401+
StreamWriter.Builder writerWithClient = StreamWriter.newBuilder(TEST_STREAM_1, client);
1402+
BigQueryWriteSettings writerSettings = StreamWriter.getBigQueryWriteSettings(writerWithClient);
1403+
assertEquals("xxx:345", writerSettings.getEndpoint());
1404+
assertTrue(
1405+
writerSettings.getBackgroundExecutorProvider() instanceof InstantiatingExecutorProvider);
1406+
assertEquals(
1407+
4,
1408+
((InstantiatingExecutorProvider) writerSettings.getBackgroundExecutorProvider())
1409+
.getExecutorThreadCount());
1410+
1411+
// Explicit setting on StreamWriter is respected.
1412+
StreamWriter.Builder writerWithClientWithOverrides =
1413+
StreamWriter.newBuilder(TEST_STREAM_1, client)
1414+
.setEndpoint("yyy:345")
1415+
.setExecutorProvider(
1416+
InstantiatingExecutorProvider.newBuilder().setExecutorThreadCount(14).build())
1417+
.setChannelProvider(
1418+
BigQueryWriteSettings.defaultGrpcTransportProviderBuilder()
1419+
.setKeepAliveTimeout(Duration.ofSeconds(500))
1420+
.build())
1421+
.setCredentialsProvider(
1422+
BigQueryWriteSettings.defaultCredentialsProviderBuilder()
1423+
.setScopesToApply(Arrays.asList("A", "B"))
1424+
.build());
1425+
BigQueryWriteSettings writerSettings2 =
1426+
StreamWriter.getBigQueryWriteSettings(writerWithClientWithOverrides);
1427+
assertEquals("yyy:345", writerSettings2.getEndpoint());
1428+
assertTrue(
1429+
writerSettings2.getBackgroundExecutorProvider() instanceof InstantiatingExecutorProvider);
1430+
assertEquals(
1431+
14,
1432+
((InstantiatingExecutorProvider) writerSettings2.getBackgroundExecutorProvider())
1433+
.getExecutorThreadCount());
1434+
assertTrue(
1435+
writerSettings2.getTransportChannelProvider() instanceof InstantiatingGrpcChannelProvider);
1436+
assertEquals(
1437+
Duration.ofSeconds(500),
1438+
((InstantiatingGrpcChannelProvider) writerSettings2.getTransportChannelProvider())
1439+
.getKeepAliveTimeout());
1440+
assertTrue(writerSettings2.getCredentialsProvider() instanceof GoogleCredentialsProvider);
1441+
assertEquals(
1442+
2,
1443+
((GoogleCredentialsProvider) writerSettings2.getCredentialsProvider())
1444+
.getScopesToApply()
1445+
.size());
1446+
}
13691447
}

0 commit comments

Comments
 (0)