From 5e73c78f937c9fca3974692312c96f6805065c33 Mon Sep 17 00:00:00 2001 From: Franklin Whaite Date: Wed, 2 Mar 2022 09:17:29 -0500 Subject: [PATCH 1/5] fix: adjusting retry logic to avoid retrying successfull job creation --- google-cloud-bigquery/pom.xml | 6 +++++ .../bigquery/BigQueryRetryAlgorithm.java | 26 +++++++++++++++++-- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/google-cloud-bigquery/pom.xml b/google-cloud-bigquery/pom.xml index 8c714685b..2f8d80169 100644 --- a/google-cloud-bigquery/pom.xml +++ b/google-cloud-bigquery/pom.xml @@ -126,8 +126,14 @@ proto-google-cloud-datacatalog-v1 test + + org.json + json + 20211205 + + 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 af472430f..be6e38f0b 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 @@ -31,8 +31,10 @@ import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; +import org.json.JSONObject; import org.threeten.bp.Duration; + public class BigQueryRetryAlgorithm extends RetryAlgorithm { private final BigQueryRetryConfig bigQueryRetryConfig; private final ResultRetryAlgorithm resultAlgorithm; @@ -107,9 +109,10 @@ private boolean shouldRetryBasedOnBigQueryRetryConfig( /* In some cases error messages may come without an exception e.g. status code 200 with a rate limit exceeded for job create - in these cases there is now previousThrowable so we need to check previousResponse + in these cases there is no previousThrowable so we need + to check for error messages in previousResponse */ - errorDesc = previousResponse.toString(); + errorDesc = getErrorDescFromResponse(previousResponse); } if (errorDesc != null) { @@ -212,4 +215,23 @@ private TimedAttemptSettings createNextAttemptBasedOnTiming( } return getTimedAlgorithm().createNextAttempt(previousSettings); } + + private String getErrorDescFromResponse(ResponseT previousResponse) { + /* + error messages may come without an exception and must be extracted from response + 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 { + JSONObject jsonObject = new JSONObject(previousResponse.toString()); + if(jsonObject.has("status") && jsonObject.getJSONObject("status").has("errorResult") ){ + return jsonObject.getJSONObject("status").getJSONObject("errorResult").getString("message"); + } else { + return null; + } + } catch(Exception e) { + // exceptions here implies no error message present in response, returning null + return null; + } + } } From 00e1f258d080b39a84dec42921c85ad8a5f7f900 Mon Sep 17 00:00:00 2001 From: Franklin Whaite Date: Wed, 2 Mar 2022 09:20:14 -0500 Subject: [PATCH 2/5] refactoring --- google-cloud-bigquery/pom.xml | 1 - .../java/com/google/cloud/bigquery/BigQueryRetryAlgorithm.java | 1 - 2 files changed, 2 deletions(-) diff --git a/google-cloud-bigquery/pom.xml b/google-cloud-bigquery/pom.xml index 2f8d80169..1ba28b534 100644 --- a/google-cloud-bigquery/pom.xml +++ b/google-cloud-bigquery/pom.xml @@ -133,7 +133,6 @@ - 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 be6e38f0b..68b112893 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 @@ -34,7 +34,6 @@ import org.json.JSONObject; import org.threeten.bp.Duration; - public class BigQueryRetryAlgorithm extends RetryAlgorithm { private final BigQueryRetryConfig bigQueryRetryConfig; private final ResultRetryAlgorithm resultAlgorithm; From ab425e57c948459324c861b6fc85039ee2817fb2 Mon Sep 17 00:00:00 2001 From: Franklin Whaite Date: Wed, 2 Mar 2022 09:54:16 -0500 Subject: [PATCH 3/5] fixing code formatting --- .../com/google/cloud/bigquery/BigQueryRetryAlgorithm.java | 4 ++-- 1 file changed, 2 insertions(+), 2 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 68b112893..d9a8ca8dd 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 @@ -223,12 +223,12 @@ private String getErrorDescFromResponse(ResponseT previousResponse) { */ try { JSONObject jsonObject = new JSONObject(previousResponse.toString()); - if(jsonObject.has("status") && jsonObject.getJSONObject("status").has("errorResult") ){ + if (jsonObject.has("status") && jsonObject.getJSONObject("status").has("errorResult")) { return jsonObject.getJSONObject("status").getJSONObject("errorResult").getString("message"); } else { return null; } - } catch(Exception e) { + } catch (Exception e) { // exceptions here implies no error message present in response, returning null return null; } From a63f39f805105cec654c44c94d06d750cf520d99 Mon Sep 17 00:00:00 2001 From: Franklin Whaite Date: Wed, 2 Mar 2022 16:42:53 -0500 Subject: [PATCH 4/5] removing org.json and using gson instead --- google-cloud-bigquery/pom.xml | 5 ----- .../cloud/bigquery/BigQueryRetryAlgorithm.java | 14 ++++++++++---- 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/google-cloud-bigquery/pom.xml b/google-cloud-bigquery/pom.xml index 1ba28b534..8c714685b 100644 --- a/google-cloud-bigquery/pom.xml +++ b/google-cloud-bigquery/pom.xml @@ -126,11 +126,6 @@ proto-google-cloud-datacatalog-v1 test - - org.json - json - 20211205 - 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 d9a8ca8dd..0429b7f00 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 @@ -25,13 +25,14 @@ 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 java.util.Iterator; import java.util.UUID; import java.util.concurrent.CancellationException; import java.util.logging.Level; import java.util.logging.Logger; import java.util.regex.Pattern; -import org.json.JSONObject; import org.threeten.bp.Duration; public class BigQueryRetryAlgorithm extends RetryAlgorithm { @@ -222,9 +223,14 @@ private String getErrorDescFromResponse(ResponseT previousResponse) { known case where a response with status code 200 may contain an error message */ try { - JSONObject jsonObject = new JSONObject(previousResponse.toString()); - if (jsonObject.has("status") && jsonObject.getJSONObject("status").has("errorResult")) { - return jsonObject.getJSONObject("status").getJSONObject("errorResult").getString("message"); + 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; } From 8eb64d7b2c458f8d0b64245608eed1322f9099f8 Mon Sep 17 00:00:00 2001 From: Owl Bot Date: Thu, 3 Mar 2022 16:24:57 +0000 Subject: [PATCH 5/5] =?UTF-8?q?=F0=9F=A6=89=20Updates=20from=20OwlBot=20po?= =?UTF-8?q?st-processor?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit See https://github.com/googleapis/repo-automation-bots/blob/main/packages/owl-bot/README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d3f20914e..5805c3884 100644 --- a/README.md +++ b/README.md @@ -52,7 +52,7 @@ If you are using Maven without BOM, add this to your dependencies: If you are using Gradle 5.x or later, add this to your dependencies ```Groovy -implementation platform('com.google.cloud:libraries-bom:24.3.0') +implementation platform('com.google.cloud:libraries-bom:24.4.0') implementation 'com.google.cloud:google-cloud-bigquery' ```