mirror of
https://github.com/rangermix/TwitchDropsMiner.git
synced 2026-05-28 16:09:39 +00:00
Implement a single-time retry logic for "service error"
This commit is contained in:
36
twitch.py
36
twitch.py
@@ -1353,6 +1353,8 @@ class Twitch:
|
||||
) -> JsonType | list[JsonType]:
|
||||
gql_logger.debug(f"GQL Request: {ops}")
|
||||
backoff = ExponentialBackoff(maximum=60)
|
||||
# Use a flag to retry the request a single time, if a "service error" is encountered
|
||||
service_error_retry: bool = True
|
||||
for delay in backoff:
|
||||
async with self._qgl_limiter:
|
||||
auth_state = await self.get_auth()
|
||||
@@ -1371,21 +1373,29 @@ class Twitch:
|
||||
response_list = [response_json]
|
||||
force_retry: bool = False
|
||||
for response_json in response_list:
|
||||
# GQL errors handling
|
||||
# GQL error handling
|
||||
if "errors" in response_json:
|
||||
for error_dict in response_json["errors"]:
|
||||
if (
|
||||
"message" in error_dict
|
||||
and error_dict["message"] in (
|
||||
# "server error",
|
||||
# "service error",
|
||||
"service unavailable",
|
||||
"service timeout",
|
||||
"context deadline exceeded",
|
||||
)
|
||||
):
|
||||
force_retry = True
|
||||
break
|
||||
if "message" in error_dict:
|
||||
if error_dict["message"] == "service error" and service_error_retry:
|
||||
logger.error(
|
||||
"Retrying a \"service error\" for "
|
||||
f"{response_json['extensions']['operationName']}"
|
||||
)
|
||||
service_error_retry = False
|
||||
delay = 5 # overwrite delay
|
||||
force_retry = True
|
||||
break
|
||||
elif (
|
||||
error_dict["message"] in (
|
||||
# "server error",
|
||||
"service unavailable",
|
||||
"service timeout",
|
||||
"context deadline exceeded",
|
||||
)
|
||||
):
|
||||
force_retry = True
|
||||
break
|
||||
else:
|
||||
raise GQLException(response_json['errors'])
|
||||
# Other error handling
|
||||
|
||||
Reference in New Issue
Block a user