From 22987b6498cc32b8b13ee9d1bfc53a9861087418 Mon Sep 17 00:00:00 2001 From: Kirill Logachev Date: Wed, 18 Feb 2026 22:34:25 +0000 Subject: [PATCH 1/3] fix: improve getErrorDescFromResponse() performance --- .../google/cloud/bigquery/BigQueryRetryAlgorithm.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java index 7b168c12d1..13d99166a7 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; +import com.google.api.client.json.GenericJson; import com.google.api.gax.retrying.ResultRetryAlgorithm; import com.google.api.gax.retrying.ResultRetryAlgorithmWithContext; import com.google.api.gax.retrying.RetryAlgorithm; @@ -223,6 +224,16 @@ private String getErrorDescFromResponse(ResponseT previousResponse) { known case where a response with status code 200 may contain an error message */ try { + if (previousResponse instanceof GenericJson) { + if (((GenericJson)previousResponse).containsKey("status")){ + Object o1 = ((GenericJson)previousResponse).get("status"); + if (o1 instanceof GenericJson && ((GenericJson)o1).containsKey("errorResult")){ + Object o2 = ((GenericJson)o1).get("errorStatus"); + return ((GenericJson)o2).get("message").toString(); + } + } + return null; + } JsonObject responseJson = JsonParser.parseString(previousResponse.toString()).getAsJsonObject(); if (responseJson.has("status") && responseJson.getAsJsonObject("status").has("errorResult")) { From 9341a76779d319eb0021689d2be932754ec5a8e7 Mon Sep 17 00:00:00 2001 From: Kirill Logachev Date: Wed, 18 Feb 2026 23:18:35 +0000 Subject: [PATCH 2/3] Update error handling --- .../bigquery/BigQueryRetryAlgorithm.java | 33 ++++--------------- 1 file changed, 7 insertions(+), 26 deletions(-) diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java index 13d99166a7..73dc9c61bd 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java @@ -18,7 +18,8 @@ import static com.google.common.base.Preconditions.checkNotNull; -import com.google.api.client.json.GenericJson; +import com.google.api.services.bigquery.model.ErrorProto; +import com.google.api.services.bigquery.model.Job; import com.google.api.gax.retrying.ResultRetryAlgorithm; import com.google.api.gax.retrying.ResultRetryAlgorithmWithContext; import com.google.api.gax.retrying.RetryAlgorithm; @@ -223,31 +224,11 @@ private String getErrorDescFromResponse(ResponseT previousResponse) { following logic based on response body of jobs.insert method, so far the only known case where a response with status code 200 may contain an error message */ - try { - if (previousResponse instanceof GenericJson) { - if (((GenericJson)previousResponse).containsKey("status")){ - Object o1 = ((GenericJson)previousResponse).get("status"); - if (o1 instanceof GenericJson && ((GenericJson)o1).containsKey("errorResult")){ - Object o2 = ((GenericJson)o1).get("errorStatus"); - return ((GenericJson)o2).get("message").toString(); - } - } - return null; - } - JsonObject responseJson = - JsonParser.parseString(previousResponse.toString()).getAsJsonObject(); - if (responseJson.has("status") && responseJson.getAsJsonObject("status").has("errorResult")) { - return responseJson - .getAsJsonObject("status") - .getAsJsonObject("errorResult") - .get("message") - .toString(); - } else { - return null; - } - } catch (Exception e) { - // exceptions here implies no error message present in response, returning null - return null; + if (previousResponse instanceof Job) { + Job job = (Job)previousResponse; + ErrorProto error = job.getStatus() != null ? job.getStatus().getErrorResult() : null; + return error != null ? error.getMessage() : null; } + return null; } } From 2b92e2a5088a69b52d859f3ce7990914cc27e154 Mon Sep 17 00:00:00 2001 From: Kirill Logachev Date: Wed, 18 Feb 2026 23:31:00 +0000 Subject: [PATCH 3/3] lint --- .../com/google/cloud/bigquery/BigQueryRetryAlgorithm.java | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java index 73dc9c61bd..140f2c6eba 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java @@ -18,8 +18,6 @@ import static com.google.common.base.Preconditions.checkNotNull; -import com.google.api.services.bigquery.model.ErrorProto; -import com.google.api.services.bigquery.model.Job; import com.google.api.gax.retrying.ResultRetryAlgorithm; import com.google.api.gax.retrying.ResultRetryAlgorithmWithContext; import com.google.api.gax.retrying.RetryAlgorithm; @@ -27,8 +25,8 @@ import com.google.api.gax.retrying.TimedAttemptSettings; import com.google.api.gax.retrying.TimedRetryAlgorithm; import com.google.api.gax.retrying.TimedRetryAlgorithmWithContext; -import com.google.gson.JsonObject; -import com.google.gson.JsonParser; +import com.google.api.services.bigquery.model.ErrorProto; +import com.google.api.services.bigquery.model.Job; import java.time.Duration; import java.util.Iterator; import java.util.UUID; @@ -225,7 +223,7 @@ private String getErrorDescFromResponse(ResponseT previousResponse) { known case where a response with status code 200 may contain an error message */ if (previousResponse instanceof Job) { - Job job = (Job)previousResponse; + Job job = (Job) previousResponse; ErrorProto error = job.getStatus() != null ? job.getStatus().getErrorResult() : null; return error != null ? error.getMessage() : null; }