-
Notifications
You must be signed in to change notification settings - Fork 977
Closed
Labels
bugThis issue is a bug.This issue is a bug.p1This is a high priority issueThis is a high priority issuepotential-regressionMarking this issue as a potential regression to be checked by team memberMarking this issue as a potential regression to be checked by team member
Description
Describe the bug
S3 putObject via RequestBody.fromContentProvider yields an object with 0 bytes. The operation completes as though it were successful, which increases the harm of this bug since there's potential for undetected data loss.
I believe this is related to #5801. The problem goes away when I set the environment variable AWS_REQUEST_CHECKSUM_CALCULATION=WHEN_REQUIRED.
This started with 2.30.0.
Regression Issue
- Select this option if this issue appears to be a regression.
Expected Behavior
S3 putObject via RequestBody.fromContentProvider uploads all content from the input stream, yielding an object with non-zero size in the S3 bucket.
Current Behavior
The object in S3 has zero bytes, despite the operation reporting success.
Reproduction Steps
package repro;
import software.amazon.awssdk.auth.credentials.ProfileCredentialsProvider;
import software.amazon.awssdk.core.sync.RequestBody;
import software.amazon.awssdk.regions.Region;
import software.amazon.awssdk.services.s3.S3Client;
import software.amazon.awssdk.services.s3.model.HeadObjectRequest;
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
import java.io.IOException;
import java.net.URL;
public class UploadRepro {
public static void main(String[] args) throws IOException {
final var bucket = "XXXXXXXXXXXXXX";
final var key = "XXXXXXXX";
final var url = new URL(
"https://raw.githubusercontent.com/aws/aws-sdk-java-v2/ad35231f768e1bb68e6f77cb29f69d1a7278931e/.changes/next-release/feature-AmazonS3-c101d4d.json"
);
var s3Client = S3Client.builder()
.credentialsProvider(ProfileCredentialsProvider.builder().profileName("Dev-Admin").build())
.region(Region.US_EAST_1)
.build();
try (var stream = url.openStream()) {
s3Client.putObject(
PutObjectRequest.builder().bucket(bucket).key(key).build(),
RequestBody.fromContentProvider(() -> stream, "application/json")
);
}
var length = s3Client.headObject(
HeadObjectRequest.builder().bucket(bucket).key(key).build()
).contentLength();
System.out.println(length); // prints 0
}
}
Possible Solution
No response
Additional Information/Context
No response
AWS Java SDK version used
2.30.1
JDK version used
openjdk version "17.0.13"
Operating System and version
MacOS 15.1.1
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bugThis issue is a bug.This issue is a bug.p1This is a high priority issueThis is a high priority issuepotential-regressionMarking this issue as a potential regression to be checked by team memberMarking this issue as a potential regression to be checked by team member