Skip to content

Commit ba99348

Browse files
github: Retry RESOURCE_LIMITS_EXCEEDED GraphQL errors with backoff
1 parent 8f8fdfa commit ba99348

1 file changed

Lines changed: 15 additions & 0 deletions

File tree

revup/github_real.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ async def graphql(self, query: str, **kwargs: Any) -> Any:
6060
max_retries = 3
6161
base_delay = 1.0
6262
transient_statuses = {500, 502, 503, 504}
63+
retryable_graphql_errors = {"RESOURCE_LIMITS_EXCEEDED"}
6364

6465
headers = {}
6566
if self.oauth_token:
@@ -104,6 +105,20 @@ async def graphql(self, query: str, **kwargs: Any) -> Any:
104105
logging.debug("Response JSON:\n{}".format(pretty_json))
105106

106107
if "errors" in r:
108+
error_types = {err.get("type", "Unknown") for err in r["errors"]}
109+
if error_types & retryable_graphql_errors:
110+
if attempt < max_retries - 1:
111+
delay = base_delay * (2**attempt)
112+
logging.warning(
113+
"GitHub GraphQL error ({}), retrying in {}s (attempt {}/{})".format(
114+
", ".join(error_types & retryable_graphql_errors),
115+
delay,
116+
attempt + 1,
117+
max_retries,
118+
)
119+
)
120+
await asyncio.sleep(delay)
121+
continue
107122
raise RevupGithubException(r["errors"])
108123

109124
if resp.status != 200:

0 commit comments

Comments
 (0)