From 9d0a32d397bfacb52170528c46d17230e73d24db Mon Sep 17 00:00:00 2001 From: whowes Date: Mon, 15 Jun 2026 20:27:47 +0000 Subject: [PATCH 1/2] test(bigquerystorage): create sessions using await() to address flakiness --- google-cloud-jar-parent/pom.xml | 6 ++++++ .../google-cloud-bigquerystorage/pom.xml | 5 +++++ .../storage/v1beta1/it/ITBigQueryStorageTest.java | 11 ++++++++++- .../storage/v1beta2/it/ITBigQueryStorageTest.java | 11 ++++++++++- 4 files changed, 31 insertions(+), 2 deletions(-) diff --git a/google-cloud-jar-parent/pom.xml b/google-cloud-jar-parent/pom.xml index 01c1cc9a8180..0bd0f97e6904 100644 --- a/google-cloud-jar-parent/pom.xml +++ b/google-cloud-jar-parent/pom.xml @@ -71,6 +71,12 @@ + + org.awaitility + awaitility + 4.3.0 + test + junit junit diff --git a/java-bigquerystorage/google-cloud-bigquerystorage/pom.xml b/java-bigquerystorage/google-cloud-bigquerystorage/pom.xml index 5d2607f2ac0e..cb4f796140c6 100644 --- a/java-bigquerystorage/google-cloud-bigquerystorage/pom.xml +++ b/java-bigquerystorage/google-cloud-bigquerystorage/pom.xml @@ -197,6 +197,11 @@ opentelemetry-sdk-trace test + + org.awaitility + awaitility + test + junit junit diff --git a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java index 04191a38a45e..bbfd34603236 100644 --- a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java +++ b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java @@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -26,6 +27,7 @@ import static org.junit.jupiter.api.Assertions.fail; import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.api.gax.rpc.NotFoundException; import com.google.api.gax.rpc.ServerStream; import com.google.api.gax.rpc.UnauthenticatedException; import com.google.auth.oauth2.ServiceAccountCredentials; @@ -79,6 +81,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.UUID; import java.util.concurrent.TimeUnit; import java.util.logging.Logger; @@ -1230,7 +1233,13 @@ private void ProcessRowsAtSnapshot( TableReadOptions.newBuilder().setRowRestriction(filter).build()); } - ReadSession session = client.createReadSession(createSessionRequestBuilder.build()); + final CreateReadSessionRequest request = createSessionRequestBuilder.build(); + ReadSession session = + await() + .atMost(Duration.ofSeconds(30)) + .pollInterval(Duration.ofSeconds(1)) + .ignoreException(NotFoundException.class) + .until(() -> client.createReadSession(request), Objects::nonNull); assertEquals( 1, session.getStreamsCount(), diff --git a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java index f48d41acbd70..43cfec959ed3 100644 --- a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java +++ b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java @@ -18,6 +18,7 @@ import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static org.awaitility.Awaitility.await; import static org.junit.jupiter.api.Assertions.assertArrayEquals; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -26,6 +27,7 @@ import static org.junit.jupiter.api.Assertions.fail; import com.google.api.gax.core.FixedCredentialsProvider; +import com.google.api.gax.rpc.NotFoundException; import com.google.api.gax.rpc.ServerStream; import com.google.api.gax.rpc.UnauthenticatedException; import com.google.auth.oauth2.ServiceAccountCredentials; @@ -76,6 +78,7 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Objects; import java.util.UUID; import java.util.logging.Logger; import org.apache.avro.Conversions; @@ -1211,7 +1214,13 @@ private void ProcessRowsAtSnapshot( .setReadOptions(TableReadOptions.newBuilder().setRowRestriction(filter).build()); } - ReadSession session = client.createReadSession(createSessionRequestBuilder.build()); + final CreateReadSessionRequest request = createSessionRequestBuilder.build(); + ReadSession session = + await() + .atMost(Duration.ofSeconds(30)) + .pollInterval(Duration.ofSeconds(1)) + .ignoreException(NotFoundException.class) + .until(() -> client.createReadSession(request), Objects::nonNull); assertEquals( 1, session.getStreamsCount(), From b318fdf60e6466f1d115e28f758ef99881442e67 Mon Sep 17 00:00:00 2001 From: whowes Date: Tue, 16 Jun 2026 20:38:36 +0000 Subject: [PATCH 2/2] fix imports ordering and remove matcher that's incompatible with graalvm --- google-cloud-jar-parent/pom.xml | 6 ----- .../v1beta1/it/ITBigQueryStorageTest.java | 22 ++++++++++++------- .../v1beta2/it/ITBigQueryStorageTest.java | 22 ++++++++++++------- 3 files changed, 28 insertions(+), 22 deletions(-) diff --git a/google-cloud-jar-parent/pom.xml b/google-cloud-jar-parent/pom.xml index 0bd0f97e6904..01c1cc9a8180 100644 --- a/google-cloud-jar-parent/pom.xml +++ b/google-cloud-jar-parent/pom.xml @@ -71,12 +71,6 @@ - - org.awaitility - awaitility - 4.3.0 - test - junit junit diff --git a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java index bbfd34603236..4e631baebe99 100644 --- a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java +++ b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta1/it/ITBigQueryStorageTest.java @@ -81,9 +81,9 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Objects; import java.util.UUID; import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Logger; import org.apache.avro.Conversions; import org.apache.avro.LogicalTypes; @@ -1233,13 +1233,19 @@ private void ProcessRowsAtSnapshot( TableReadOptions.newBuilder().setRowRestriction(filter).build()); } - final CreateReadSessionRequest request = createSessionRequestBuilder.build(); - ReadSession session = - await() - .atMost(Duration.ofSeconds(30)) - .pollInterval(Duration.ofSeconds(1)) - .ignoreException(NotFoundException.class) - .until(() -> client.createReadSession(request), Objects::nonNull); + CreateReadSessionRequest request = createSessionRequestBuilder.build(); + AtomicReference sessionRef = new AtomicReference<>(); + await() + .atMost(Duration.ofSeconds(10)) + .pollInterval(Duration.ofSeconds(1)) + // retry if the newly-created table has not yet fully propagated + .ignoreException(NotFoundException.class) + .until( + () -> { + sessionRef.set(client.createReadSession(request)); + return true; + }); + ReadSession session = sessionRef.get(); assertEquals( 1, session.getStreamsCount(), diff --git a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java index 43cfec959ed3..88b2f48b8b7f 100644 --- a/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java +++ b/java-bigquerystorage/google-cloud-bigquerystorage/src/test/java/com/google/cloud/bigquery/storage/v1beta2/it/ITBigQueryStorageTest.java @@ -78,8 +78,8 @@ import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Objects; import java.util.UUID; +import java.util.concurrent.atomic.AtomicReference; import java.util.logging.Logger; import org.apache.avro.Conversions; import org.apache.avro.LogicalTypes; @@ -1214,13 +1214,19 @@ private void ProcessRowsAtSnapshot( .setReadOptions(TableReadOptions.newBuilder().setRowRestriction(filter).build()); } - final CreateReadSessionRequest request = createSessionRequestBuilder.build(); - ReadSession session = - await() - .atMost(Duration.ofSeconds(30)) - .pollInterval(Duration.ofSeconds(1)) - .ignoreException(NotFoundException.class) - .until(() -> client.createReadSession(request), Objects::nonNull); + CreateReadSessionRequest request = createSessionRequestBuilder.build(); + AtomicReference sessionRef = new AtomicReference<>(); + await() + .atMost(Duration.ofSeconds(10)) + .pollInterval(Duration.ofSeconds(1)) + // retry if the newly-created table has not yet fully propagated + .ignoreException(NotFoundException.class) + .until( + () -> { + sessionRef.set(client.createReadSession(request)); + return true; + }); + ReadSession session = sessionRef.get(); assertEquals( 1, session.getStreamsCount(),