Implement a single-time retry logic for "service error"
This commit is contained in:
1 parent
1dac01b141
commit
f5690a0396
1 file changed
+23
-13
@@ -1353,6 +1353,8 @@ class Twitch:
|
|||||||
) -> JsonType | list[JsonType]:
|
) -> JsonType | list[JsonType]:
|
||||||
gql_logger.debug(f"GQL Request: {ops}")
|
gql_logger.debug(f"GQL Request: {ops}")
|
||||||
backoff = ExponentialBackoff(maximum=60)
|
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:
|
for delay in backoff:
|
||||||
async with self._qgl_limiter:
|
async with self._qgl_limiter:
|
||||||
auth_state = await self.get_auth()
|
auth_state = await self.get_auth()
|
||||||
@@ -1371,21 +1373,29 @@ class Twitch:
|
|||||||
response_list = [response_json]
|
response_list = [response_json]
|
||||||
force_retry: bool = False
|
force_retry: bool = False
|
||||||
for response_json in response_list:
|
for response_json in response_list:
|
||||||
# GQL errors handling
|
# GQL error handling
|
||||||
if "errors" in response_json:
|
if "errors" in response_json:
|
||||||
for error_dict in response_json["errors"]:
|
for error_dict in response_json["errors"]:
|
||||||
if (
|
if "message" in error_dict:
|
||||||
"message" in error_dict
|
if error_dict["message"] == "service error" and service_error_retry:
|
||||||
and error_dict["message"] in (
|
logger.error(
|
||||||
# "server error",
|
"Retrying a \"service error\" for "
|
||||||
# "service error",
|
f"{response_json['extensions']['operationName']}"
|
||||||
"service unavailable",
|
)
|
||||||
"service timeout",
|
service_error_retry = False
|
||||||
"context deadline exceeded",
|
delay = 5 # overwrite delay
|
||||||
)
|
force_retry = True
|
||||||
):
|
break
|
||||||
force_retry = True
|
elif (
|
||||||
break
|
error_dict["message"] in (
|
||||||
|
# "server error",
|
||||||
|
"service unavailable",
|
||||||
|
"service timeout",
|
||||||
|
"context deadline exceeded",
|
||||||
|
)
|
||||||
|
):
|
||||||
|
force_retry = True
|
||||||
|
break
|
||||||
else:
|
else:
|
||||||
raise GQLException(response_json['errors'])
|
raise GQLException(response_json['errors'])
|
||||||
# Other error handling
|
# Other error handling
|
||||||
|
|||||||
Reference in new issue
Block a user