From 0a56e0e695dd82634a55f4a7d84becc8f39c1fa4 Mon Sep 17 00:00:00 2001 From: Gaole Meng Date: Wed, 6 Mar 2024 22:03:12 -0800 Subject: [PATCH 1/2] fix: fix channel not shut down properly exception. Client being created has to be properly closed, otherwise during garbage collection an error will be reported showing channel not shutdown properly --- .../example/bigquerystorage/WriteToDefaultStream.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java b/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java index 6c35f06018..2eaab720f5 100644 --- a/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java +++ b/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java @@ -138,6 +138,8 @@ private static class DataWriter { private static final int MAX_RECREATE_COUNT = 3; + private BigQueryWriteClient client; + // Track the number of in-flight requests to wait for all responses before shutting down. private final Phaser inflightRequestCount = new Phaser(1); private final Object lock = new Object(); @@ -163,12 +165,16 @@ public void initialize(TableName parentTable) .setMaxRetryDelay(Duration.ofMinutes(1)) .build(); + // Initialize client without settings, internally within stream writer a new client will be + // created with full settings. + client = BigQueryWriteClient.create(); + // Use the JSON stream writer to send records in JSON format. Specify the table name to write // to the default stream. // For more information about JsonStreamWriter, see: // https://googleapis.dev/java/google-cloud-bigquerystorage/latest/com/google/cloud/bigquery/storage/v1/JsonStreamWriter.html streamWriter = - JsonStreamWriter.newBuilder(parentTable.toString(), BigQueryWriteClient.create()) + JsonStreamWriter.newBuilder(parentTable.toString(), client) .setExecutorProvider( FixedExecutorProvider.create(Executors.newScheduledThreadPool(100))) .setChannelProvider( @@ -195,7 +201,7 @@ public void append(AppendContext appendContext) && recreateCount.getAndIncrement() < MAX_RECREATE_COUNT) { streamWriter = JsonStreamWriter.newBuilder( - streamWriter.getStreamName(), BigQueryWriteClient.create()) + streamWriter.getStreamName(), client) .build(); this.error = null; } @@ -217,6 +223,7 @@ public void cleanup() { // Wait for all in-flight requests to complete. inflightRequestCount.arriveAndAwaitAdvance(); + client.close(); // Close the connection to the server. streamWriter.close(); From f99bf56871734537f09eccf5002de37830acf647 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 7 Mar 2024 17:51:33 +0000 Subject: [PATCH 2/2] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20po?= =?UTF-8?q?st-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- README.md | 6 +++--- .../com/example/bigquerystorage/WriteToDefaultStream.java | 5 +---- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 510119e086..d415342305 100644 --- a/README.md +++ b/README.md @@ -57,13 +57,13 @@ implementation 'com.google.cloud:google-cloud-bigquerystorage' If you are using Gradle without BOM, add this to your dependencies: ```Groovy -implementation 'com.google.cloud:google-cloud-bigquerystorage:3.2.0' +implementation 'com.google.cloud:google-cloud-bigquerystorage:3.3.1' ``` If you are using SBT, add this to your dependencies: ```Scala -libraryDependencies += "com.google.cloud" % "google-cloud-bigquerystorage" % "3.2.0" +libraryDependencies += "com.google.cloud" % "google-cloud-bigquerystorage" % "3.3.1" ``` @@ -221,7 +221,7 @@ Java is a registered trademark of Oracle and/or its affiliates. [kokoro-badge-link-5]: http://storage.googleapis.com/cloud-devrel-public/java/badges/java-bigquerystorage/java11.html [stability-image]: https://img.shields.io/badge/stability-stable-green [maven-version-image]: https://img.shields.io/maven-central/v/com.google.cloud/google-cloud-bigquerystorage.svg -[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-bigquerystorage/3.2.0 +[maven-version-link]: https://central.sonatype.com/artifact/com.google.cloud/google-cloud-bigquerystorage/3.3.1 [authentication]: https://github.com/googleapis/google-cloud-java#authentication [auth-scopes]: https://developers.google.com/identity/protocols/oauth2/scopes [predefined-iam-roles]: https://cloud.google.com/iam/docs/understanding-roles#predefined_roles diff --git a/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java b/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java index 2eaab720f5..4a89d6274e 100644 --- a/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java +++ b/samples/snippets/src/main/java/com/example/bigquerystorage/WriteToDefaultStream.java @@ -199,10 +199,7 @@ public void append(AppendContext appendContext) if (!streamWriter.isUserClosed() && streamWriter.isClosed() && recreateCount.getAndIncrement() < MAX_RECREATE_COUNT) { - streamWriter = - JsonStreamWriter.newBuilder( - streamWriter.getStreamName(), client) - .build(); + streamWriter = JsonStreamWriter.newBuilder(streamWriter.getStreamName(), client).build(); this.error = null; } // If earlier appends have failed, we need to reset before continuing.