Merge pull request #917 from MichaelMure/github-cap-rate-limit

github: sanitize rate limit waiting time
This commit is contained in:
Michael Muré 2022-11-15 20:12:03 +01:00 committed by GitHub
commit b02ba48ad6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -87,7 +87,7 @@ func (c *rateLimitHandlerClient) queryPrintMsgs(ctx context.Context, query inter
return c.callAPIAndRetry(ctx, queryFun, callback)
}
// callAPIAndRetry calls the Github GraphQL API (inderectely through callAPIDealWithLimit) and in
// callAPIAndRetry calls the Github GraphQL API (indirectly through callAPIDealWithLimit) and in
// case of error it repeats the request to the Github API. The parameter `apiCall` is intended to be
// a closure containing a query or a mutation to the Github GraphQL API.
func (c *rateLimitHandlerClient) callAPIAndRetry(ctx context.Context, apiCall func(context.Context) error, rateLimitEvent func(msg string)) error {
@ -149,8 +149,17 @@ func (c *rateLimitHandlerClient) callAPIDealWithLimit(ctx context.Context, apiCa
// Send message about rate limiting event.
rateLimitCallback(msg)
// sanitize the reset time, in case the local clock is wrong
waitTime := time.Until(resetTime)
if waitTime < 0 {
waitTime = 10 * time.Second
}
if waitTime > 30*time.Second {
waitTime = 30 * time.Second
}
// Pause current goroutine
timer := time.NewTimer(time.Until(resetTime))
timer := time.NewTimer(waitTime)
select {
case <-ctx.Done():
stop(timer)