Add rate limiting and retry logic to handle 429 errors #17
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.
This PR implements rate limiting and automatic retry logic to handle Contentstack's API rate limits (10 requests/second). The current SDK fails immediately when hitting 429 errors, which blocks automation tools like Terraform that make concurrent requests.
Changes implemented:
Rate Limiting Configuration: Added
RateLimit
,RateBurst
, andMaxRetries
fields toClientConfig
golang.org/x/time/rate
for token bucket rate limitingAutomatic Retry Logic: Added exponential backoff retry mechanism
MaxRetries
times (default: 3)Retry-After
headers when providedEnhanced Error Handling: Improved 429 error handling in
processResponse
Rationale:
This resolves blocking issues with Terraform and other automation tools that need to make concurrent API requests. Instead of failing immediately on rate limits, the SDK now handles them gracefully with automatic retries, making it much more reliable for production automation workflows.
Fixes #16
Related: terraform-provider-contentstack#3
Retry-After
headersThis PR template provides a comprehensive description of the changes, links to the relevant issues, and clearly categorizes the improvements made to the SDK.