Skip to content

Commit 21ee9ba

Browse files
authored
Add Expect 100-continue for UploadPartRequest (#4252)
* Add Expect 100-continue for UploadPartRequest * Fix typo
1 parent 140ce0c commit 21ee9ba

File tree

4 files changed

+23
-5
lines changed

4 files changed

+23
-5
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"type": "bugfix",
3+
"category": "Amazon S3",
4+
"contributor": "",
5+
"description": "Add `Expect: 100-continue` header for `UploadPartRequest` so that a upload part request can fail faster if there is a server error."
6+
}

services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/handlers/PutObjectInterceptor.java renamed to services/s3/src/main/java/software/amazon/awssdk/services/s3/internal/handlers/StreamingRequestInterceptor.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,18 @@
2121
import software.amazon.awssdk.core.interceptor.ExecutionInterceptor;
2222
import software.amazon.awssdk.http.SdkHttpRequest;
2323
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
24+
import software.amazon.awssdk.services.s3.model.UploadPartRequest;
2425

2526
/**
2627
* Interceptor to add an 'Expect: 100-continue' header to the HTTP Request if it represents a PUT Object request.
2728
*/
2829
@SdkInternalApi
2930
//TODO: This should be generalized for all streaming requests
30-
public final class PutObjectInterceptor implements ExecutionInterceptor {
31+
public final class StreamingRequestInterceptor implements ExecutionInterceptor {
3132
@Override
3233
public SdkHttpRequest modifyHttpRequest(Context.ModifyHttpRequest context,
3334
ExecutionAttributes executionAttributes) {
34-
if (context.request() instanceof PutObjectRequest) {
35+
if (context.request() instanceof PutObjectRequest || context.request() instanceof UploadPartRequest) {
3536
return context.httpRequest().toBuilder().putHeader("Expect", "100-continue").build();
3637
}
3738
return context.httpRequest();

services/s3/src/main/resources/codegen-resources/customization.config

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@
237237
"asyncClientDecorator": "software.amazon.awssdk.services.s3.internal.client.S3AsyncClientDecorator",
238238
"useGlobalEndpoint": true,
239239
"interceptors": [
240-
"software.amazon.awssdk.services.s3.internal.handlers.PutObjectInterceptor",
240+
"software.amazon.awssdk.services.s3.internal.handlers.StreamingRequestInterceptor",
241241
"software.amazon.awssdk.services.s3.internal.handlers.CreateBucketInterceptor",
242242
"software.amazon.awssdk.services.s3.internal.handlers.CreateMultipartUploadRequestInterceptor",
243243
"software.amazon.awssdk.services.s3.internal.handlers.EnableChunkedEncodingInterceptor",
Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,10 @@
2323
import software.amazon.awssdk.http.SdkHttpRequest;
2424
import software.amazon.awssdk.services.s3.model.GetObjectRequest;
2525
import software.amazon.awssdk.services.s3.model.PutObjectRequest;
26+
import software.amazon.awssdk.services.s3.model.UploadPartRequest;
2627

27-
public class PutObjectInterceptorTest {
28-
private final PutObjectInterceptor interceptor = new PutObjectInterceptor();
28+
public class StreamingRequestInterceptorTest {
29+
private final StreamingRequestInterceptor interceptor = new StreamingRequestInterceptor();
2930

3031
@Test
3132
public void modifyHttpRequest_setsExpect100Continue_whenSdkRequestIsPutObject() {
@@ -36,6 +37,16 @@ public void modifyHttpRequest_setsExpect100Continue_whenSdkRequestIsPutObject()
3637
assertThat(modifiedRequest.firstMatchingHeader("Expect")).hasValue("100-continue");
3738
}
3839

40+
@Test
41+
public void modifyHttpRequest_setsExpect100Continue_whenSdkRequestIsUploadPart() {
42+
43+
final SdkHttpRequest modifiedRequest =
44+
interceptor.modifyHttpRequest(modifyHttpRequestContext(UploadPartRequest.builder().build()),
45+
new ExecutionAttributes());
46+
47+
assertThat(modifiedRequest.firstMatchingHeader("Expect")).hasValue("100-continue");
48+
}
49+
3950
@Test
4051
public void modifyHttpRequest_doesNotSetExpect_whenSdkRequestIsNotPutObject() {
4152

0 commit comments

Comments
 (0)