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);
   }
 }

Reply via email to