Skip to content

Commit

Permalink
Implement a single-time retry logic for "service error"
Browse files Browse the repository at this point in the history
  • Loading branch information
DevilXD committed Dec 30, 2024
1 parent 1dac01b commit f5690a0
Showing 1 changed file with 23 additions and 13 deletions.
36 changes: 23 additions & 13 deletions twitch.py
Original file line number Diff line number Diff line change
Expand Up @@ -1353,6 +1353,8 @@ async def gql_request(
) -> 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()
Expand All @@ -1371,21 +1373,29 @@ async def gql_request(
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
Expand Down

0 comments on commit f5690a0

Please sign in to comment.