Skip to content

Retry CompleteMultipartUpload and DeleteObjects on in-body errors#1703

Open
harshavardhana wants to merge 1 commit into
minio:masterfrom
harshavardhana:retry-in-body-errors
Open

Retry CompleteMultipartUpload and DeleteObjects on in-body errors#1703
harshavardhana wants to merge 1 commit into
minio:masterfrom
harshavardhana:retry-in-body-errors

Conversation

@harshavardhana
Copy link
Copy Markdown
Member

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.

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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant