feat: honor Retry-After header in BackOffHandler - #3204
Open
spiccoaura wants to merge 2 commits into
Open
Conversation
There was a problem hiding this comment.
Code Review
This pull request introduces support for honoring the HTTP Retry-After header (both relative delay and absolute date/time formats) in the BackOffHandler, along with corresponding unit tests. The review feedback highlights an issue where a zero or negative Retry-After delay (which can occur due to clock skew or immediate retry instructions) incorrectly falls back to the standard exponential back-off. It is recommended to clamp negative delays to TimeSpan.Zero and respect the immediate retry instruction instead of falling back.
Contributor
|
|
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.
Description
This PR addresses the issue where
BackOffHandlerdoesn't honor theRetry-Afterheader sent by Google APIs during rate-limiting scenarios (HTTP 429).Previously, the handler strictly relied on the standard exponential back-off algorithm. Now, it extracts either the delta interval (seconds) or the absolute target date from the
Retry-Afterheader if present, falling back to the standard exponential algorithm if the header is missing or invalid.Changes
BackOffHandler.HandleResponseAsyncto parseargs.Response.Headers.RetryAfter.HandleAsyncmethod signature to pass down the optional parsedTimeSpan.ConfigurableMessageHandlerTestcovering both Delta and Date header configurations.All 118 tests pass successfully across both target frameworks (net8.0 and net462).
Closes #2715