Retry CompleteMultipartUpload and DeleteObjects on in-body errors#1703
Open
harshavardhana wants to merge 1 commit into
Open
Retry CompleteMultipartUpload and DeleteObjects on in-body errors#1703harshavardhana wants to merge 1 commit into
harshavardhana wants to merge 1 commit into
Conversation
S3 surfaces transient errors inside 200-OK response bodies for these two APIs, so the existing HTTP status-code retry path never sees them. Add a RETRIABLE_ERROR_CODES set (InternalError, SlowDown, ServiceUnavailable, RequestTimeout, Throttling, ThrottlingException) and retry these calls with the same exponential-backoff config as StatusRetryInterceptor. CompleteMultipartUpload: retry the whole request when the body parses as <Error> with a retriable code. DeleteObjects: retry the whole batch when any per-object error has a retriable code. Delete is idempotent so re-sending already-deleted keys is safe.
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.
Some S3 APIs return HTTP 200 OK but report transient failures inside the XML body. The existing retry interceptor only looks at status codes, so these slip through.
This adds a small set of retriable S3 error codes (InternalError, SlowDown, ServiceUnavailable, RequestTimeout, Throttling, ThrottlingException) and reuses the same backoff/budget already configured for status-code retries.
CompleteMultipartUpload retries the whole request when the 200-OK body is an with a retriable code. DeleteObjects retries the whole batch when any per-object error is retriable — delete is idempotent so re-sending already-deleted keys is safe, and non-retriable errors still surface as before.