From b5628d9045b331a1f2884267667cf4bac93a3d4f 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 | 12 +++++++++++- .../storage/v1beta2/it/ITBigQueryStorageTest.java | 12 +++++++++++- 4 files changed, 33 insertions(+), 2 deletions(-) diff --git a/google-cloud-jar-parent/pom.xml b/google-cloud-jar-parent/pom.xml index 20fa3e5ec4a7..e26fb46c8d96 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 fdc6eab9271f..d8f902e54fef 100644 --- a/java-bigquerystorage/google-cloud-bigquerystorage/pom.xml +++ b/java-bigquerystorage/google-cloud-bigquerystorage/pom.xml @@ -193,6 +193,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..7e023ee26edb 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 @@ -16,6 +16,10 @@ package com.google.cloud.bigquery.storage.v1beta1.it; +import static org.awaitility.Awaitility.await; +import com.google.api.gax.rpc.NotFoundException; +import java.util.Objects; + import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -1230,7 +1234,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..e7cf800f3bef 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 @@ -16,6 +16,10 @@ package com.google.cloud.bigquery.storage.v1beta2.it; +import static org.awaitility.Awaitility.await; +import com.google.api.gax.rpc.NotFoundException; +import java.util.Objects; + import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -1211,7 +1215,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 5f3c0f000dab8539f3d2a384d9631c6e1925b0cc 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 --- .../v1beta1/it/ITBigQueryStorageTest.java | 21 ++++++++++--------- .../v1beta2/it/ITBigQueryStorageTest.java | 21 ++++++++++--------- 2 files changed, 22 insertions(+), 20 deletions(-) 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 7e023ee26edb..5c09d56d7c8b 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 @@ -16,12 +16,9 @@ package com.google.cloud.bigquery.storage.v1beta1.it; -import static org.awaitility.Awaitility.await; -import com.google.api.gax.rpc.NotFoundException; -import java.util.Objects; - 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; @@ -30,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; @@ -85,6 +83,7 @@ import java.util.List; 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; @@ -1235,12 +1234,14 @@ private void ProcessRowsAtSnapshot( } 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); + final 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) + .untilAsserted(() -> sessionRef.set(client.createReadSession(request))); + 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 e7cf800f3bef..871e774f579e 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 @@ -16,12 +16,9 @@ package com.google.cloud.bigquery.storage.v1beta2.it; -import static org.awaitility.Awaitility.await; -import com.google.api.gax.rpc.NotFoundException; -import java.util.Objects; - 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; @@ -30,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; @@ -81,6 +79,7 @@ import java.util.Iterator; import java.util.List; 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; @@ -1216,12 +1215,14 @@ private void ProcessRowsAtSnapshot( } 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); + final 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) + .untilAsserted(() -> sessionRef.set(client.createReadSession(request))); + ReadSession session = sessionRef.get(); assertEquals( 1, session.getStreamsCount(),