Back off and retry whenever API rate limits are reached #10
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Atlassian applies rate limiting to Jira's REST APIs [1]. When the rate limit for a particular endpoint has been reached, Jira produces a response that is compatible with RFC 6585 section 4: the status is set to
429 Too Many Requests
, and the client is expected not to reattempt the request until at least the number of seconds given by theRetry-After
header have elapsed. Currently the defaultClient
and the built-inTransport
s do not respect any rate limits, and exceeding them results in errors.Use
github.com/hashicorp/go-retryablehttp
to implement RFC 6585 section 4 in the defaultClient
and built-inTransport
s so that the API rate limits are respected. A welcome side-effect is that failed requests due to (e.g.) network problems will also be retried (up to a maximum of 4 times, go-retryablehttp's default).[1] https://developer.atlassian.com/cloud/jira/platform/rate-limiting/