21
21
import static software .amazon .awssdk .services .s3 .internal .crt .S3NativeClientConfiguration .DEFAULT_PART_SIZE_IN_BYTES ;
22
22
23
23
import java .net .URI ;
24
+ import java .util .ArrayList ;
25
+ import java .util .List ;
24
26
import java .util .concurrent .CompletableFuture ;
25
27
import software .amazon .awssdk .annotations .SdkInternalApi ;
28
+ import software .amazon .awssdk .annotations .SdkTestInternalApi ;
26
29
import software .amazon .awssdk .auth .credentials .AwsCredentialsProvider ;
27
30
import software .amazon .awssdk .awscore .AwsRequest ;
28
31
import software .amazon .awssdk .awscore .AwsRequestOverrideConfiguration ;
29
32
import software .amazon .awssdk .core .SdkRequest ;
30
33
import software .amazon .awssdk .core .checksums .ChecksumValidation ;
34
+ import software .amazon .awssdk .core .client .config .ClientOverrideConfiguration ;
31
35
import software .amazon .awssdk .core .client .config .SdkAdvancedClientOption ;
32
36
import software .amazon .awssdk .core .interceptor .Context ;
33
37
import software .amazon .awssdk .core .interceptor .ExecutionAttributes ;
@@ -69,6 +73,19 @@ public CompletableFuture<CopyObjectResponse> copyObject(CopyObjectRequest copyOb
69
73
}
70
74
71
75
private static S3AsyncClient initializeS3AsyncClient (DefaultS3CrtClientBuilder builder ) {
76
+ ClientOverrideConfiguration .Builder overrideConfigurationBuilder =
77
+ ClientOverrideConfiguration .builder ()
78
+ .putAdvancedOption (SdkAdvancedClientOption .SIGNER , new NoOpSigner ())
79
+ .putExecutionAttribute (SdkExecutionAttribute .HTTP_RESPONSE_CHECKSUM_VALIDATION ,
80
+ ChecksumValidation .FORCE_SKIP )
81
+ .retryPolicy (RetryPolicy .none ())
82
+ .addExecutionInterceptor (new ValidateRequestInterceptor ())
83
+ .addExecutionInterceptor (new AttachHttpAttributesExecutionInterceptor ());
84
+
85
+ if (builder .executionInterceptors != null ) {
86
+ builder .executionInterceptors .forEach (overrideConfigurationBuilder ::addExecutionInterceptor );
87
+ }
88
+
72
89
return S3AsyncClient .builder ()
73
90
// Disable checksum, retry policy and signer because they are handled in crt
74
91
.serviceConfiguration (S3Configuration .builder ()
@@ -77,14 +94,11 @@ private static S3AsyncClient initializeS3AsyncClient(DefaultS3CrtClientBuilder b
77
94
.region (builder .region )
78
95
.endpointOverride (builder .endpointOverride )
79
96
.credentialsProvider (builder .credentialsProvider )
80
- .overrideConfiguration (o -> o .putAdvancedOption (SdkAdvancedClientOption .SIGNER ,
81
- new NoOpSigner ())
82
- .putExecutionAttribute (
83
- SdkExecutionAttribute .HTTP_RESPONSE_CHECKSUM_VALIDATION ,
84
- ChecksumValidation .FORCE_SKIP )
85
- .retryPolicy (RetryPolicy .none ())
86
- .addExecutionInterceptor (new ValidateRequestInterceptor ())
87
- .addExecutionInterceptor (new AttachHttpAttributesExecutionInterceptor ()))
97
+ .overrideConfiguration (overrideConfigurationBuilder .build ())
98
+ .accelerate (builder .accelerate )
99
+ .disableMultiRegionAccessPoints (builder .disableMultiRegionAccessPoints )
100
+ .forcePathStyle (builder .forcePathStyle )
101
+ .useArnRegion (builder .useArnRegion )
88
102
.httpClientBuilder (initializeS3CrtAsyncHttpClient (builder ))
89
103
.build ();
90
104
}
@@ -123,6 +137,12 @@ public static final class DefaultS3CrtClientBuilder implements S3CrtAsyncClientB
123
137
private URI endpointOverride ;
124
138
private Boolean checksumValidationEnabled ;
125
139
private S3CrtHttpConfiguration httpConfiguration ;
140
+ private Boolean accelerate ;
141
+ private Boolean disableMultiRegionAccessPoints ;
142
+ private Boolean forcePathStyle ;
143
+ private Boolean useArnRegion ;
144
+
145
+ private List <ExecutionInterceptor > executionInterceptors ;
126
146
127
147
public AwsCredentialsProvider credentialsProvider () {
128
148
return credentialsProvider ;
@@ -206,6 +226,39 @@ public S3CrtAsyncClientBuilder httpConfiguration(S3CrtHttpConfiguration configur
206
226
return this ;
207
227
}
208
228
229
+ @ Override
230
+ public S3CrtAsyncClientBuilder accelerate (Boolean accelerate ) {
231
+ this .accelerate = accelerate ;
232
+ return this ;
233
+ }
234
+
235
+ @ Override
236
+ public S3CrtAsyncClientBuilder disableMultiRegionAccessPoints (Boolean disableMultiRegionAccessPoints ) {
237
+ this .disableMultiRegionAccessPoints = disableMultiRegionAccessPoints ;
238
+ return this ;
239
+ }
240
+
241
+ @ Override
242
+ public S3CrtAsyncClientBuilder forcePathStyle (Boolean forcePathStyle ) {
243
+ this .forcePathStyle = forcePathStyle ;
244
+ return this ;
245
+ }
246
+
247
+ @ Override
248
+ public S3CrtAsyncClientBuilder useArnRegion (Boolean useArnRegion ) {
249
+ this .useArnRegion = useArnRegion ;
250
+ return this ;
251
+ }
252
+
253
+ @ SdkTestInternalApi
254
+ S3CrtAsyncClientBuilder addExecutionInterceptor (ExecutionInterceptor executionInterceptor ) {
255
+ if (executionInterceptors == null ) {
256
+ this .executionInterceptors = new ArrayList <>();
257
+ }
258
+ executionInterceptors .add (executionInterceptor );
259
+ return this ;
260
+ }
261
+
209
262
@ Override
210
263
public S3CrtAsyncClient build () {
211
264
return new DefaultS3CrtAsyncClient (this );
0 commit comments