This is an automated email from the ASF dual-hosted git repository.
nastra pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/iceberg.git
The following commit(s) were added to refs/heads/main by this push:
new eee5457984 BigQuery: Deduplicate retry handling in
BigQueryMetastoreClientImpl (#17904)
eee5457984 is described below
commit eee545798484047f5b4302901c306f11043fbc0b
Author: Damanpreet Singh <[email protected]>
AuthorDate: Mon Oct 12 13:09:21 2026 +0530
BigQuery: Deduplicate retry handling in BigQueryMetastoreClientImpl (#17904)
---
.../gcp/bigquery/BigQueryMetastoreClientImpl.java | 110 ++++++---------------
1 file changed, 32 insertions(+), 78 deletions(-)
diff --git
a/bigquery/src/main/java/org/apache/iceberg/gcp/bigquery/BigQueryMetastoreClientImpl.java
b/bigquery/src/main/java/org/apache/iceberg/gcp/bigquery/BigQueryMetastoreClientImpl.java
index 508d50b301..c10982e439 100644
---
a/bigquery/src/main/java/org/apache/iceberg/gcp/bigquery/BigQueryMetastoreClientImpl.java
+++
b/bigquery/src/main/java/org/apache/iceberg/gcp/bigquery/BigQueryMetastoreClientImpl.java
@@ -55,6 +55,7 @@ import java.util.Locale;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
+import java.util.concurrent.Callable;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.apache.iceberg.BaseMetastoreTableOperations;
@@ -148,21 +149,7 @@ public final class BigQueryMetastoreClientImpl implements
BigQueryMetastoreClien
@Override
public Dataset create(Dataset dataset) {
- Dataset response = null;
- try {
- response =
- BigQueryRetryHelper.runWithRetries(
- () -> internalCreate(dataset),
- bigqueryOptions.getRetrySettings(),
- BIGQUERY_EXCEPTION_HANDLER,
- bigqueryOptions.getClock(),
- DEFAULT_RETRY_CONFIG,
- bigqueryOptions.isOpenTelemetryTracingEnabled(),
- bigqueryOptions.getOpenTelemetryTracer());
- } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {
- handleBigQueryRetryException(e);
- }
- return response;
+ return runWithRetries(() -> internalCreate(dataset));
}
private Dataset internalCreate(Dataset dataset) {
@@ -245,18 +232,7 @@ public final class BigQueryMetastoreClientImpl implements
BigQueryMetastoreClien
dataset.setExternalCatalogDatasetOptions(optionsToUpdate.setParameters(newParameters));
- try {
- BigQueryRetryHelper.runWithRetries(
- () -> internalUpdate(dataset),
- bigqueryOptions.getRetrySettings(),
- BIGQUERY_EXCEPTION_HANDLER,
- bigqueryOptions.getClock(),
- DEFAULT_RETRY_CONFIG,
- bigqueryOptions.isOpenTelemetryTracingEnabled(),
- bigqueryOptions.getOpenTelemetryTracer());
- } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {
- handleBigQueryRetryException(e);
- }
+ runWithRetries(() -> internalUpdate(dataset));
return true;
}
@@ -286,18 +262,7 @@ public final class BigQueryMetastoreClientImpl implements
BigQueryMetastoreClien
dataset.setExternalCatalogDatasetOptions(existingOptions.setParameters(newParameters));
- try {
- BigQueryRetryHelper.runWithRetries(
- () -> internalUpdate(dataset),
- bigqueryOptions.getRetrySettings(),
- BIGQUERY_EXCEPTION_HANDLER,
- bigqueryOptions.getClock(),
- DEFAULT_RETRY_CONFIG,
- bigqueryOptions.isOpenTelemetryTracingEnabled(),
- bigqueryOptions.getOpenTelemetryTracer());
- } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {
- handleBigQueryRetryException(e);
- }
+ runWithRetries(() -> internalUpdate(dataset));
return true;
}
@@ -328,22 +293,7 @@ public final class BigQueryMetastoreClientImpl implements
BigQueryMetastoreClien
// Ensure it is an Iceberg table supported by the BigQuery metastore
catalog.
validateTable(table);
// TODO: Ensure table creation is idempotent when handling retries.
- Table response = null;
- try {
- response =
- BigQueryRetryHelper.runWithRetries(
- () -> internalCreate(table),
- bigqueryOptions.getRetrySettings(),
- BIGQUERY_EXCEPTION_HANDLER,
- bigqueryOptions.getClock(),
- DEFAULT_RETRY_CONFIG,
- bigqueryOptions.isOpenTelemetryTracingEnabled(),
- bigqueryOptions.getOpenTelemetryTracer());
- } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {
- handleBigQueryRetryException(e);
- }
-
- return response;
+ return runWithRetries(() -> internalCreate(table));
}
private Table internalCreate(Table table) {
@@ -401,22 +351,7 @@ public final class BigQueryMetastoreClientImpl implements
BigQueryMetastoreClien
// Must set the schema as null for using schema auto-detect.
.setSchema(Data.nullOf(TableSchema.class));
- Table response = null;
- try {
- response =
- BigQueryRetryHelper.runWithRetries(
- () -> internalUpdate(tableReference, updatedTable,
table.getEtag()),
- bigqueryOptions.getRetrySettings(),
- BIGQUERY_EXCEPTION_HANDLER,
- bigqueryOptions.getClock(),
- DEFAULT_RETRY_CONFIG,
- bigqueryOptions.isOpenTelemetryTracingEnabled(),
- bigqueryOptions.getOpenTelemetryTracer());
- } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {
- handleBigQueryRetryException(e);
- }
-
- return response;
+ return runWithRetries(() -> internalUpdate(tableReference, updatedTable,
table.getEtag()));
}
private Table internalUpdate(TableReference tableReference, Table table,
String etag) {
@@ -638,17 +573,36 @@ public final class BigQueryMetastoreClientImpl implements
BigQueryMetastoreClien
}
/**
- * Translates BigQueryRetryHelperException to the RuntimeException that
caused the error. This
- * method will always throw an exception.
+ * Executes the given callable through {@link BigQueryRetryHelper} with this
client's configured
+ * retry settings, translating a {@link
BigQueryRetryHelper.BigQueryRetryHelperException} into the
+ * underlying runtime exception.
*/
- private static void handleBigQueryRetryException(
+ private <T> T runWithRetries(Callable<T> callable) {
+ try {
+ return BigQueryRetryHelper.runWithRetries(
+ callable,
+ bigqueryOptions.getRetrySettings(),
+ BIGQUERY_EXCEPTION_HANDLER,
+ bigqueryOptions.getClock(),
+ DEFAULT_RETRY_CONFIG,
+ bigqueryOptions.isOpenTelemetryTracingEnabled(),
+ bigqueryOptions.getOpenTelemetryTracer());
+ } catch (BigQueryRetryHelper.BigQueryRetryHelperException e) {
+ throw asRuntimeException(e);
+ }
+ }
+
+ /**
+ * Returns the {@link RuntimeException} that caused the given retry
exception, wrapping a
+ * non-runtime cause in a new {@link RuntimeException}.
+ */
+ private static RuntimeException asRuntimeException(
BigQueryRetryHelper.BigQueryRetryHelperException retryException) {
Throwable cause = retryException.getCause();
- String message = retryException.getMessage();
if (cause instanceof RuntimeException runtimeException) {
- throw runtimeException;
- } else {
- throw new RuntimeException(message, cause);
+ return runtimeException;
}
+
+ return new RuntimeException(retryException.getMessage(), cause);
}
}