Skip to content

Commit becd0c0

Browse files
authored
[8.x] Handle status code 200 for s3 CMU response (elastic#122815) (elastic#122903)
* Handle status code 200 for s3 CMU response (elastic#122815) When a CopmleteMultipartUpload request fails after the initial 200 response, the status code of the failure response use to be not set and hence got translated to status code 0. With elastic#116212, we handle this case accordingly. Since AWS SDK 1.12.691, the status code is now set to 200 instead of 0. This PR changes our error handling code accordingly. Relates: elastic#122431 Relates: elastic#116212 Resolves: elastic#122799 Relevant AWS SDK change https://github.com/aws/aws-sdk-java/blame/430899c217f34fae63b35c77f4d9bfd361c9de77/aws-java-sdk-s3/src/main/java/com/amazonaws/services/s3/AmazonS3Client.java#L3696-L3709 (cherry picked from commit 850249b) # Conflicts: # muted-tests.yml * unmute
1 parent 49f14c8 commit becd0c0

File tree

2 files changed

+2
-6
lines changed

2 files changed

+2
-6
lines changed

modules/repository-s3/src/main/java/org/elasticsearch/repositories/s3/S3BlobContainer.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -884,11 +884,10 @@ public void compareAndExchangeRegister(
884884
logger.trace(() -> Strings.format("[%s]: compareAndExchangeRegister failed", key), e);
885885
if (e instanceof AmazonS3Exception amazonS3Exception
886886
&& (amazonS3Exception.getStatusCode() == 404
887-
|| amazonS3Exception.getStatusCode() == 0 && "NoSuchUpload".equals(amazonS3Exception.getErrorCode()))) {
887+
|| amazonS3Exception.getStatusCode() == 200 && "NoSuchUpload".equals(amazonS3Exception.getErrorCode()))) {
888888
// An uncaught 404 means that our multipart upload was aborted by a concurrent operation before we could complete it.
889889
// Also (rarely) S3 can start processing the request during a concurrent abort and this can result in a 200 OK with an
890-
// <Error><Code>NoSuchUpload</Code>... in the response, which the SDK translates to status code 0. Either way, this means
891-
// that our write encountered contention:
890+
// <Error><Code>NoSuchUpload</Code>... in the response. Either way, this means that our write encountered contention:
892891
delegate.onResponse(OptionalBytesReference.MISSING);
893892
} else {
894893
delegate.onFailure(e);

muted-tests.yml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -474,6 +474,3 @@ tests:
474474
- class: org.elasticsearch.xpack.test.rest.XPackRestIT
475475
method: test {p0=snapshot/10_basic/Create a source only snapshot and then restore it}
476476
issue: https://github.com/elastic/elasticsearch/issues/122755
477-
- class: org.elasticsearch.repositories.blobstore.testkit.analyze.S3RepositoryAnalysisRestIT
478-
method: testRepositoryAnalysis
479-
issue: https://github.com/elastic/elasticsearch/issues/122799

0 commit comments

Comments
 (0)