Skip to content

Commit d2c527d

Browse files
committed
Reolving conflicts
2 parents ff9fab2 + 843e2b9 commit d2c527d

File tree

92 files changed

+11418
-5207
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

92 files changed

+11418
-5207
lines changed

.changes/next-release/bugfix-AmazonDynamoDBEnhancedClient-18f50d7.json

Lines changed: 0 additions & 6 deletions
This file was deleted.

README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ To automatically manage module versions (currently all modules have the same ver
5151
<dependency>
5252
<groupId>software.amazon.awssdk</groupId>
5353
<artifactId>bom</artifactId>
54-
<version>2.34.4</version>
54+
<version>2.34.9</version>
5555
<type>pom</type>
5656
<scope>import</scope>
5757
</dependency>
@@ -85,12 +85,12 @@ Alternatively you can add dependencies for the specific services you use only:
8585
<dependency>
8686
<groupId>software.amazon.awssdk</groupId>
8787
<artifactId>ec2</artifactId>
88-
<version>2.34.4</version>
88+
<version>2.34.9</version>
8989
</dependency>
9090
<dependency>
9191
<groupId>software.amazon.awssdk</groupId>
9292
<artifactId>s3</artifactId>
93-
<version>2.34.4</version>
93+
<version>2.34.9</version>
9494
</dependency>
9595
```
9696

@@ -102,7 +102,7 @@ You can import the whole SDK into your project (includes *ALL* services). Please
102102
<dependency>
103103
<groupId>software.amazon.awssdk</groupId>
104104
<artifactId>aws-sdk-java</artifactId>
105-
<version>2.34.4</version>
105+
<version>2.34.9</version>
106106
</dependency>
107107
```
108108

bundle-sdk/pom.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -188,6 +188,14 @@
188188
<include>software.amazon.eventstream:eventstream</include>
189189
</includes>
190190
</artifactSet>
191+
<filters>
192+
<filter>
193+
<artifact>com.github.ben-manes.caffeine:caffeine</artifact>
194+
<excludes>
195+
<exclude>META-INF/jandex.idx</exclude>
196+
</excludes>
197+
</filter>
198+
</filters>
191199
<relocations>
192200
<relocation>
193201
<pattern>org.apache</pattern>

core/auth/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,11 @@
9393
<artifactId>http-auth-spi</artifactId>
9494
<version>${awsjavasdk.version}</version>
9595
</dependency>
96+
<dependency>
97+
<groupId>software.amazon.awssdk</groupId>
98+
<artifactId>checksums-spi</artifactId>
99+
<version>${awsjavasdk.version}</version>
100+
</dependency>
96101
<dependency>
97102
<groupId>software.amazon.eventstream</groupId>
98103
<artifactId>eventstream</artifactId>

core/auth/src/main/java/software/amazon/awssdk/auth/signer/internal/chunkedencoding/AwsSignedChunkedEncodingInputStream.java

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,11 +19,13 @@
1919
import java.io.InputStream;
2020
import java.nio.charset.StandardCharsets;
2121
import software.amazon.awssdk.annotations.SdkInternalApi;
22+
import software.amazon.awssdk.checksums.spi.ChecksumAlgorithm;
2223
import software.amazon.awssdk.core.checksums.Algorithm;
2324
import software.amazon.awssdk.core.checksums.SdkChecksum;
2425
import software.amazon.awssdk.core.exception.SdkClientException;
2526
import software.amazon.awssdk.core.internal.chunked.AwsChunkedEncodingConfig;
2627
import software.amazon.awssdk.core.internal.io.AwsChunkedEncodingInputStream;
28+
import software.amazon.awssdk.http.auth.spi.signer.PayloadChecksumStore;
2729
import software.amazon.awssdk.utils.BinaryUtils;
2830

2931
/**
@@ -60,12 +62,15 @@ public final class AwsSignedChunkedEncodingInputStream extends AwsChunkedEncodin
6062
* @param config The configuration allows the user to customize chunk size and buffer size.
6163
* See {@link AwsChunkedEncodingConfig} for default values.
6264
*/
63-
private AwsSignedChunkedEncodingInputStream(InputStream in, SdkChecksum sdkChecksum,
65+
private AwsSignedChunkedEncodingInputStream(InputStream in,
66+
ChecksumAlgorithm checksumAlgorithm,
67+
SdkChecksum sdkChecksum,
68+
PayloadChecksumStore checksumStore,
6469
String checksumHeaderForTrailer,
6570
String headerSignature,
6671
AwsChunkSigner chunkSigner,
6772
AwsChunkedEncodingConfig config) {
68-
super(in, sdkChecksum, checksumHeaderForTrailer, config);
73+
super(in, checksumAlgorithm, sdkChecksum, checksumStore, checksumHeaderForTrailer, config);
6974
this.chunkSigner = chunkSigner;
7075
this.previousChunkSignature = headerSignature;
7176
this.headerSignature = headerSignature;
@@ -103,9 +108,14 @@ public Builder awsChunkSigner(AwsChunkSigner awsChunkSigner) {
103108

104109
public AwsSignedChunkedEncodingInputStream build() {
105110

106-
return new AwsSignedChunkedEncodingInputStream(this.inputStream, this.sdkChecksum, this.checksumHeaderForTrailer,
111+
return new AwsSignedChunkedEncodingInputStream(this.inputStream,
112+
this.checksumAlgorithm,
113+
this.sdkChecksum,
114+
this.checksumStore,
115+
this.checksumHeaderForTrailer,
107116
this.headerSignature,
108-
this.awsChunkSigner, this.awsChunkedEncodingConfig);
117+
this.awsChunkSigner,
118+
this.awsChunkedEncodingConfig);
109119
}
110120
}
111121

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/AwsChunkedV4aPayloadSigner.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,15 @@
3535
import software.amazon.awssdk.http.Header;
3636
import software.amazon.awssdk.http.SdkHttpRequest;
3737
import software.amazon.awssdk.http.auth.aws.internal.signer.CredentialScope;
38+
import software.amazon.awssdk.http.auth.aws.internal.signer.NoOpPayloadChecksumStore;
3839
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChecksumTrailerProvider;
3940
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.ChunkedEncodedInputStream;
4041
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.TrailerProvider;
4142
import software.amazon.awssdk.http.auth.aws.internal.signer.io.ChecksumInputStream;
4243
import software.amazon.awssdk.http.auth.aws.internal.signer.io.ResettableContentStreamProvider;
44+
import software.amazon.awssdk.http.auth.spi.signer.PayloadChecksumStore;
4345
import software.amazon.awssdk.utils.BinaryUtils;
46+
import software.amazon.awssdk.utils.Logger;
4447
import software.amazon.awssdk.utils.Pair;
4548
import software.amazon.awssdk.utils.StringInputStream;
4649
import software.amazon.awssdk.utils.Validate;
@@ -51,16 +54,20 @@
5154
*/
5255
@SdkInternalApi
5356
public final class AwsChunkedV4aPayloadSigner implements V4aPayloadSigner {
57+
private static final Logger LOG = Logger.loggerFor(AwsChunkedV4aPayloadSigner.class);
5458

5559
private final CredentialScope credentialScope;
5660
private final int chunkSize;
5761
private final ChecksumAlgorithm checksumAlgorithm;
62+
private final PayloadChecksumStore payloadChecksumStore;
5863
private final List<Pair<String, List<String>>> preExistingTrailers = new ArrayList<>();
5964

6065
private AwsChunkedV4aPayloadSigner(Builder builder) {
6166
this.credentialScope = Validate.paramNotNull(builder.credentialScope, "CredentialScope");
6267
this.chunkSize = Validate.isPositive(builder.chunkSize, "ChunkSize");
6368
this.checksumAlgorithm = builder.checksumAlgorithm;
69+
this.payloadChecksumStore = builder.checksumStore == null ? NoOpPayloadChecksumStore.create() :
70+
builder.checksumStore;
6471
}
6572

6673
public static Builder builder() {
@@ -241,21 +248,41 @@ private void setupChecksumTrailerIfNeeded(ChunkedEncodedInputStream.Builder buil
241248
return;
242249
}
243250
String checksumHeaderName = checksumHeaderName(checksumAlgorithm);
251+
252+
String cachedChecksum = getCachedChecksum();
253+
254+
if (cachedChecksum != null) {
255+
LOG.debug(() -> String.format("Cached payload checksum available for algorithm %s: %s. Using cached value",
256+
checksumAlgorithm.algorithmId(), checksumHeaderName));
257+
builder.addTrailer(() -> Pair.of(checksumHeaderName, Collections.singletonList(cachedChecksum)));
258+
return;
259+
}
260+
244261
SdkChecksum sdkChecksum = fromChecksumAlgorithm(checksumAlgorithm);
245262
ChecksumInputStream checksumInputStream = new ChecksumInputStream(
246263
builder.inputStream(),
247264
Collections.singleton(sdkChecksum)
248265
);
249266

250-
TrailerProvider checksumTrailer = new ChecksumTrailerProvider(sdkChecksum, checksumHeaderName);
267+
TrailerProvider checksumTrailer =
268+
new ChecksumTrailerProvider(sdkChecksum, checksumHeaderName, checksumAlgorithm, payloadChecksumStore);
251269

252270
builder.inputStream(checksumInputStream).addTrailer(checksumTrailer);
253271
}
254272

273+
private String getCachedChecksum() {
274+
byte[] checksumBytes = payloadChecksumStore.getChecksumValue(checksumAlgorithm);
275+
if (checksumBytes != null) {
276+
return BinaryUtils.toBase64(checksumBytes);
277+
}
278+
return null;
279+
}
280+
255281
static final class Builder {
256282
private CredentialScope credentialScope;
257283
private Integer chunkSize;
258284
private ChecksumAlgorithm checksumAlgorithm;
285+
private PayloadChecksumStore checksumStore;
259286

260287
public Builder credentialScope(CredentialScope credentialScope) {
261288
this.credentialScope = credentialScope;
@@ -272,6 +299,11 @@ public Builder checksumAlgorithm(ChecksumAlgorithm checksumAlgorithm) {
272299
return this;
273300
}
274301

302+
public Builder checksumStore(PayloadChecksumStore checksumStore) {
303+
this.checksumStore = checksumStore;
304+
return this;
305+
}
306+
275307
public AwsChunkedV4aPayloadSigner build() {
276308
return new AwsChunkedV4aPayloadSigner(this);
277309
}

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/crt/internal/signer/DefaultAwsCrtV4aHttpSigner.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.CredentialUtils.sanitizeCredentials;
3434
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.SignerConstant.PRESIGN_URL_MAX_EXPIRATION_DURATION;
3535
import static software.amazon.awssdk.http.auth.aws.internal.signer.util.SignerConstant.X_AMZ_TRAILER;
36+
import static software.amazon.awssdk.http.auth.spi.signer.SdkInternalHttpSignerProperty.CHECKSUM_STORE;
3637

3738
import java.time.Clock;
3839
import java.time.Duration;
@@ -47,11 +48,13 @@
4748
import software.amazon.awssdk.http.SdkHttpRequest;
4849
import software.amazon.awssdk.http.auth.aws.internal.signer.Checksummer;
4950
import software.amazon.awssdk.http.auth.aws.internal.signer.CredentialScope;
51+
import software.amazon.awssdk.http.auth.aws.internal.signer.NoOpPayloadChecksumStore;
5052
import software.amazon.awssdk.http.auth.aws.signer.AwsV4aHttpSigner;
5153
import software.amazon.awssdk.http.auth.aws.signer.RegionSet;
5254
import software.amazon.awssdk.http.auth.spi.signer.AsyncSignRequest;
5355
import software.amazon.awssdk.http.auth.spi.signer.AsyncSignedRequest;
5456
import software.amazon.awssdk.http.auth.spi.signer.BaseSignRequest;
57+
import software.amazon.awssdk.http.auth.spi.signer.PayloadChecksumStore;
5558
import software.amazon.awssdk.http.auth.spi.signer.SignRequest;
5659
import software.amazon.awssdk.http.auth.spi.signer.SignedRequest;
5760
import software.amazon.awssdk.identity.spi.AwsCredentialsIdentity;
@@ -70,7 +73,7 @@ public final class DefaultAwsCrtV4aHttpSigner implements AwsV4aHttpSigner {
7073

7174
@Override
7275
public SignedRequest sign(SignRequest<? extends AwsCredentialsIdentity> request) {
73-
Checksummer checksummer = checksummer(request, null);
76+
Checksummer checksummer = checksummer(request, null, checksumStore(request));
7477
V4aProperties v4aProperties = v4aProperties(request);
7578
AwsSigningConfig signingConfig = signingConfig(request, v4aProperties);
7679
V4aPayloadSigner payloadSigner = v4aPayloadSigner(request, v4aProperties);
@@ -104,7 +107,7 @@ private static V4aProperties v4aProperties(BaseSignRequest<?, ? extends AwsCrede
104107
}
105108

106109
private static V4aPayloadSigner v4aPayloadSigner(
107-
BaseSignRequest<?, ? extends AwsCredentialsIdentity> request,
110+
SignRequest<? extends AwsCredentialsIdentity> request,
108111
V4aProperties v4aProperties) {
109112

110113
boolean isPayloadSigning = isPayloadSigning(request);
@@ -117,6 +120,7 @@ private static V4aPayloadSigner v4aPayloadSigner(
117120
.credentialScope(v4aProperties.getCredentialScope())
118121
.chunkSize(DEFAULT_CHUNK_SIZE_IN_BYTES)
119122
.checksumAlgorithm(request.property(CHECKSUM_ALGORITHM))
123+
.checksumStore(checksumStore(request))
120124
.build();
121125
}
122126

@@ -252,4 +256,12 @@ private static V4aRequestSigningResult sign(SdkHttpRequest request, HttpRequest
252256
signingResult.getSignature(),
253257
signingConfig);
254258
}
259+
260+
private static PayloadChecksumStore checksumStore(SignRequest<? extends AwsCredentialsIdentity> request) {
261+
PayloadChecksumStore cache = request.property(CHECKSUM_STORE);
262+
if (cache == null) {
263+
return NoOpPayloadChecksumStore.create();
264+
}
265+
return cache;
266+
}
255267
}

core/http-auth-aws/src/main/java/software/amazon/awssdk/http/auth/aws/internal/signer/AwsChunkedV4PayloadSigner.java

Lines changed: 33 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,9 @@
4545
import software.amazon.awssdk.http.auth.aws.internal.signer.chunkedencoding.TrailerProvider;
4646
import software.amazon.awssdk.http.auth.aws.internal.signer.io.ChecksumInputStream;
4747
import software.amazon.awssdk.http.auth.aws.internal.signer.io.ResettableContentStreamProvider;
48+
import software.amazon.awssdk.http.auth.spi.signer.PayloadChecksumStore;
4849
import software.amazon.awssdk.utils.BinaryUtils;
50+
import software.amazon.awssdk.utils.Logger;
4951
import software.amazon.awssdk.utils.Pair;
5052
import software.amazon.awssdk.utils.Validate;
5153

@@ -55,16 +57,20 @@
5557
*/
5658
@SdkInternalApi
5759
public final class AwsChunkedV4PayloadSigner implements V4PayloadSigner {
60+
private static final Logger LOG = Logger.loggerFor(AwsChunkedV4PayloadSigner.class);
5861

5962
private final CredentialScope credentialScope;
6063
private final int chunkSize;
6164
private final ChecksumAlgorithm checksumAlgorithm;
65+
private final PayloadChecksumStore payloadChecksumStore;
6266
private final List<Pair<String, List<String>>> preExistingTrailers = new ArrayList<>();
6367

6468
private AwsChunkedV4PayloadSigner(Builder builder) {
6569
this.credentialScope = Validate.paramNotNull(builder.credentialScope, "CredentialScope");
6670
this.chunkSize = Validate.isPositive(builder.chunkSize, "ChunkSize");
6771
this.checksumAlgorithm = builder.checksumAlgorithm;
72+
this.payloadChecksumStore = builder.checksumStore == null ? NoOpPayloadChecksumStore.create() :
73+
builder.checksumStore;
6874
}
6975

7076
public static Builder builder() {
@@ -259,22 +265,43 @@ private void setupChecksumTrailerIfNeeded(ChunkedEncodedInputStream.Builder buil
259265
if (checksumAlgorithm == null) {
260266
return;
261267
}
268+
262269
String checksumHeaderName = checksumHeaderName(checksumAlgorithm);
270+
271+
String cachedChecksum = getCachedChecksum();
272+
273+
if (cachedChecksum != null) {
274+
LOG.debug(() -> String.format("Cached payload checksum available for algorithm %s: %s. Using cached value",
275+
checksumAlgorithm.algorithmId(), checksumHeaderName));
276+
builder.addTrailer(() -> Pair.of(checksumHeaderName, Collections.singletonList(cachedChecksum)));
277+
return;
278+
}
279+
263280
SdkChecksum sdkChecksum = fromChecksumAlgorithm(checksumAlgorithm);
264281
ChecksumInputStream checksumInputStream = new ChecksumInputStream(
265282
builder.inputStream(),
266283
Collections.singleton(sdkChecksum)
267284
);
268285

269-
TrailerProvider checksumTrailer = new ChecksumTrailerProvider(sdkChecksum, checksumHeaderName);
286+
TrailerProvider checksumTrailer =
287+
new ChecksumTrailerProvider(sdkChecksum, checksumHeaderName, checksumAlgorithm, payloadChecksumStore);
270288

271289
builder.inputStream(checksumInputStream).addTrailer(checksumTrailer);
272290
}
273291

292+
private String getCachedChecksum() {
293+
byte[] checksumBytes = payloadChecksumStore.getChecksumValue(checksumAlgorithm);
294+
if (checksumBytes != null) {
295+
return BinaryUtils.toBase64(checksumBytes);
296+
}
297+
return null;
298+
}
299+
274300
static class Builder {
275301
private CredentialScope credentialScope;
276302
private Integer chunkSize;
277303
private ChecksumAlgorithm checksumAlgorithm;
304+
private PayloadChecksumStore checksumStore;
278305

279306
public Builder credentialScope(CredentialScope credentialScope) {
280307
this.credentialScope = credentialScope;
@@ -291,6 +318,11 @@ public Builder checksumAlgorithm(ChecksumAlgorithm checksumAlgorithm) {
291318
return this;
292319
}
293320

321+
public Builder checksumStore(PayloadChecksumStore checksumStore) {
322+
this.checksumStore = checksumStore;
323+
return this;
324+
}
325+
294326
public AwsChunkedV4PayloadSigner build() {
295327
return new AwsChunkedV4PayloadSigner(this);
296328
}

0 commit comments

Comments
 (0)