Skip to content

Commit

Permalink
remove BadRequest as a retryable error
Browse files Browse the repository at this point in the history
  • Loading branch information
mikealfare committed Dec 11, 2024
1 parent b96493a commit 0d4994c
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 8 deletions.
7 changes: 1 addition & 6 deletions dbt/adapters/bigquery/retry.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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)}"
)
Expand Down
4 changes: 2 additions & 2 deletions tests/unit/test_bigquery_connection_manager.py
Original file line number Diff line number Diff line change
Expand Up @@ -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")
Expand All @@ -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))
Expand Down

0 comments on commit 0d4994c

Please sign in to comment.