Description
Describe the bug
The GitHub Docs now say:
Otherwise, wait for at least one minute before retrying. If your request continues to fail due to a secondary rate limit, wait for an exponentially increasing amount of time between retries, and throw an error after a specific number of retries.
There's also a whole complex list About secondary rate limits.
To Reproduce
Reach Secondary Quota Limits:
- At least 5 GET rps
- At least 1.4 POST rps
- Run until you get Secondary Quota Error:
"You have exceeded a secondary rate limit and have been temporarily blocked from content creation. Please retry your request again later"
Expected behavior
GitHub SHOULD return a retry-after header but it does not. So I've thought of a couple ideas:
- Make the GitHubConnectorResponseErrorHandler.isError() method public down the stack so users (me) can customize the behavior.
- Update the private GitHubAbuseLimitHandler.isError() logic to handle no
Retry-After
header as described in the GitHub Docs. This may not be ideal because note everyone is running a long-running project like I am so they may not be OK with a default 1-minute sleep before throwing a RetryRequestException.
Desktop (please complete the following information):
- OS: MacOS
- JVM: Eclipse Temurin 21
- Spring-Boot 3.2.3
Additional context
BTW I'm using a GitHub Enterprise User Account accessing GH Enterprise resources so maybe that's why there's no Retry-After
header?
Another Idea is related to rateLimitChecker.checkRateLimit(this, request.rateLimitTarget());
inside the GitHubClient.sendRequest method. If it could also pass the GitHub request instead of just the rateLimitTarget then I could configure more smart ratelimit checker which tracks api calls of differing "points" to reduce throughput of the 'create content' requests which GitHub limits much more heavily than Read requests.