in awswrangler/data_api/rds.py [0:0]
def _execute_statement(self, sql: str, database: Optional[str] = None) -> str:
if database is None:
database = self.database
sleep: float = self.wait_config.sleep
total_tries: int = 0
total_sleep: float = 0
response: Optional[Dict[str, Any]] = None
last_exception: Optional[Exception] = None
while total_tries < self.wait_config.retries:
try:
response = self.client.execute_statement(
resourceArn=self.resource_arn,
database=database,
sql=sql,
secretArn=self.secret_arn,
includeResultMetadata=True,
)
self.logger.debug(
"Response received after %s tries and sleeping for a total of %s seconds", total_tries, total_sleep
)
break
except self.client.exceptions.BadRequestException as exception:
last_exception = exception
total_sleep += sleep
self.logger.debug("BadRequestException occurred: %s", exception)
self.logger.debug(
"Cluster may be paused - sleeping for %s seconds for a total of %s before retrying",
sleep,
total_sleep,
)
time.sleep(sleep)
total_tries += 1
sleep *= self.wait_config.backoff
if response is None:
self.logger.exception("Maximum BadRequestException retries reached for query %s", sql)
raise self.client.exceptions.BadRequestException(
f"Query failed - BadRequestException received after {total_tries} tries and sleeping {total_sleep}s"
) from last_exception
request_id: str = uuid.uuid4().hex
self.results[request_id] = response
return request_id