From 0d4994ce0fee269fbf40a80daf445c8824dcbe02 Mon Sep 17 00:00:00 2001 From: Mike Alfare Date: Wed, 11 Dec 2024 16:48:34 -0500 Subject: [PATCH] remove BadRequest as a retryable error --- dbt/adapters/bigquery/retry.py | 7 +------ tests/unit/test_bigquery_connection_manager.py | 4 ++-- 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/dbt/adapters/bigquery/retry.py b/dbt/adapters/bigquery/retry.py index 47a94f252..df1cae0b4 100644 --- a/dbt/adapters/bigquery/retry.py +++ b/dbt/adapters/bigquery/retry.py @@ -3,7 +3,6 @@ from google.api_core.future.polling import DEFAULT_POLLING from google.api_core.retry import Retry from google.cloud.bigquery.retry import DEFAULT_RETRY, _job_should_retry -from google.cloud.exceptions import BadRequest from requests.exceptions import ConnectionError from dbt.adapters.contracts.connection import Connection, ConnectionState @@ -73,10 +72,6 @@ def __init__(self, retries: int) -> None: self._retries: int = retries self._error_count = 0 - @staticmethod - def _is_retryable(error: Exception) -> bool: - """Return true for errors that are unlikely to occur again if retried.""" - return _job_should_retry(error) or isinstance(error, BadRequest) def __call__(self, error: Exception) -> bool: # exit immediately if the user does not want retries @@ -87,7 +82,7 @@ def __call__(self, error: Exception) -> bool: self._error_count += 1 # if the error is retryable, and we haven't breached the threshold, log and continue - if self._is_retryable(error) and self._error_count <= self._retries: + if _job_should_retry(error) and self._error_count <= self._retries: _logger.debug( f"Retry attempt {self._error_count} of {self._retries} after error: {repr(error)}" ) diff --git a/tests/unit/test_bigquery_connection_manager.py b/tests/unit/test_bigquery_connection_manager.py index c23ffc58b..33df7ebaa 100644 --- a/tests/unit/test_bigquery_connection_manager.py +++ b/tests/unit/test_bigquery_connection_manager.py @@ -53,7 +53,7 @@ def generate_connection_reset_error(): assert new_mock_client is not self.mock_client def test_is_retryable(self): - _is_retryable = dbt.adapters.bigquery.retry._DeferredException(1)._is_retryable + _is_retryable = google.cloud.bigquery.retry._job_should_retry exceptions = dbt.adapters.bigquery.impl.google.cloud.exceptions internal_server_error = exceptions.InternalServerError("code broke") bad_request_error = exceptions.BadRequest("code broke") @@ -65,7 +65,7 @@ def test_is_retryable(self): service_unavailable_error = exceptions.ServiceUnavailable("service is unavailable") self.assertTrue(_is_retryable(internal_server_error)) - self.assertTrue(_is_retryable(bad_request_error)) + self.assertFalse(_is_retryable(bad_request_error)) # this was removed after initially being included self.assertTrue(_is_retryable(connection_error)) self.assertFalse(_is_retryable(client_error)) self.assertTrue(_is_retryable(rate_limit_error))