From 2c6909af089b3a373d9bd933683a628fa2e4a690 Mon Sep 17 00:00:00 2001 From: Zoe Wang <33073555+zoewangg@users.noreply.github.com> Date: Thu, 3 Aug 2023 09:28:16 -0700 Subject: [PATCH] Fix a race condition where the third upload part request was sent before the second one --- .../multipart/UploadWithUnknownContentLengthHelper.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/multipart/UploadWithUnknownContentLengthHelper.java b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/multipart/UploadWithUnknownContentLengthHelper.java index fa8be1e0c6f3..0c8c3c70b516 100644 --- a/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/multipart/UploadWithUnknownContentLengthHelper.java +++ b/services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/multipart/UploadWithUnknownContentLengthHelper.java @@ -174,11 +174,13 @@ public void onNext(AsyncRequestBody asyncRequestBody) { subscription.cancel(); } else { uploadId = createMultipartUploadResponse.uploadId(); - uploadIdFuture.complete(uploadId); log.debug(() -> "Initiated a new multipart upload, uploadId: " + uploadId); sendUploadPartRequest(uploadId, firstRequestBody); sendUploadPartRequest(uploadId, asyncRequestBody); + + // We need to complete the uploadIdFuture *after* the first two requests have been sent + uploadIdFuture.complete(uploadId); } }); CompletableFutureUtils.forwardExceptionTo(returnFuture, createMultipartUploadFuture);