Repository navigation
fix: interrupt retry backoff when context is canceled - #26
Draft
Kayvan-Zahiri wants to merge 1 commit into
Draft
Kayvan-Zahiri wants to merge 1 commit into
Kayvan-Zahiri wants to merge 1 commit into
Conversation
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.
Client.Do(ctx, ...)checks cancellation after transport errors, but its retry backoff usestime.Sleep. Cancelling the context (or reaching its deadline) while waiting after a 429/5xx response still waits out the 500–750ms first backoff before returning.Use a timer selected against
ctx.Done()and wrap the context error with the existing request-failed prefix. Recreate the request body only after the wait succeeds, so cancellation does not allocate an unused replacement body. Preserve retry counts, exponential delays, jitter and response handling. Adapt the two existing sleep stubs to the context-aware signature.Four new public
Docases cover cancellation and deadlines during retry backoff after 429 and 503 responses, using a synthetic RoundTripper with no network calls. Each fails before and passes after. Each test joins its request goroutine before returning.Validation on Go 1.27.0: focused regressions pass; full
go test -race -cover ./...passes (76.4% statement coverage),go vet ./...,go build ./..., gofmt and git diff --check pass. Existing full-suite HTTP fixtures require local loopback permissions. No live Loops requests or account credentials were used.