Add configurable maxBackoffMs for rate limit retries#103
Merged
jeffreyparker merged 11 commits intomasterfrom Mar 18, 2026
Merged
Add configurable maxBackoffMs for rate limit retries#103jeffreyparker merged 11 commits intomasterfrom
jeffreyparker merged 11 commits intomasterfrom
Conversation
Allow callers to configure the maximum backoff threshold for 429 retry logic via a new useMaxBackoffMs() builder method. Setting maxBackoffMs to 0 disables retries entirely. The default (32000ms) preserves existing behavior.
- Reject negative values in both useMaxBackoffMs() builder method and setMaxBackoffMs() setter with IllegalArgumentException - Clarify Javadoc that maxBackoffMs is the base backoff threshold before jitter (actual sleep includes up to 1000ms random jitter) - Add test for negative value rejection
…erver Tests use a real HTTPS server (OkHttp MockWebServer + okhttp-tls) to verify end-to-end retry behavior: single retry with success, exhausting the default 32s max backoff, a custom max backoff limit, and zero backoff disabling retries.
…tion Clarify that values below INITIAL_BACKOFF_MS (1000ms) also effectively disable retries, and document the ClientBuilder visibility limitation that prevents fluent method chaining from outside the package.
Rename HttpRateLimitRetryIntegrationTest to *IT (failsafe naming convention) and add maven-failsafe-plugin so socket-binding tests run in the integration-test phase instead of the default test phase.
The testRepeatRetryAfterRateLimit test already covers default backoff behavior (7 requests = 32s max) through observable retry count.
3f7dd60 to
a481565
Compare
AaronAtDuo
reviewed
Mar 18, 2026
duo-client/src/test/java/com/duosecurity/client/HttpRateLimitRetryIntegrationIT.java
Outdated
Show resolved
Hide resolved
The MockWebServer-based integration test added too much complexity (reflection hacks, test cert setup, extra dependencies) for little value over the existing unit tests. This reverts commits a481565, 50405c5, 63376d6, and 341b367: - Delete HttpRateLimitRetryIntegrationIT - Remove mockwebserver and okhttp-tls test dependencies - Remove maven-failsafe-plugin configuration - Revert CI from mvn verify back to mvn test - Restore testDefaultMaxBackoffIsUsedWhenNotSpecified unit test
This fix belongs in a separate PR since it's independent of the configurable max backoff feature.
AaronAtDuo
approved these changes
Mar 18, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Summary
useMaxBackoffMs()method to theClientBuilderso callers can configure the maximum backoff threshold for 429 (rate limit) retry logic.maxBackoffMsto0disables retries entirely.Test plan
testMaxBackoffZeroDisablesRetry— verifies that setting maxBackoff to 0 returns the 429 immediately with no retries.testMaxBackoffCustomLimit— verifies that a custom limit (4000ms) caps retries correctly.