Skip to content

Commit b63ae7c

Browse files
feature: Support of ReturnConsumedCapacity in DynamoDBEnhancedClient's TransactWriteItem operation (#5501)
* Add support for ConsumedCapacity in a BatchWrite request * Added changelog * Add support for consumed capacity in transactWriteItems * Revert "Add support for consumed capacity in transactWriteItems" This reverts commit a7bd547. * Add support for consumed capacity in transactWriteItems (cherry picked from commit a7bd547) * Revert "Added changelog" This reverts commit 1d72986 * Revert "Add support for ConsumedCapacity in a BatchWrite request" This reverts commit d185260. * Refactor the Consumed Capacity changes to make them backward compatible * Fix doc comments * Fix formatting and change Objects.hash usage to Objects.hashCode * dependency fix * Fix javadoc comments * pull changes from 4d5c584 --------- Co-authored-by: prateek.vats <[email protected]>
1 parent a113c73 commit b63ae7c

File tree

12 files changed

+854
-174
lines changed

12 files changed

+854
-174
lines changed

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedAsyncClient.java

Lines changed: 149 additions & 48 deletions
Large diffs are not rendered by default.

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/DynamoDbEnhancedClient.java

Lines changed: 139 additions & 43 deletions
Large diffs are not rendered by default.

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbEnhancedAsyncClient.java

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteResult;
3737
import software.amazon.awssdk.enhanced.dynamodb.model.TransactGetItemsEnhancedRequest;
3838
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
39+
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedResponse;
3940
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
4041

4142
@SdkInternalApi
@@ -104,7 +105,7 @@ public CompletableFuture<List<Document>> transactGetItems(
104105
@Override
105106
public CompletableFuture<Void> transactWriteItems(TransactWriteItemsEnhancedRequest request) {
106107
TransactWriteItemsOperation operation = TransactWriteItemsOperation.create(request);
107-
return operation.executeAsync(dynamoDbClient, extension);
108+
return operation.executeAsync(dynamoDbClient, extension).thenApply(r -> null);
108109
}
109110

110111
@Override
@@ -116,6 +117,21 @@ public CompletableFuture<Void> transactWriteItems(
116117
return transactWriteItems(builder.build());
117118
}
118119

120+
@Override
121+
public CompletableFuture<TransactWriteItemsEnhancedResponse> transactWriteItemsWithResponse(
122+
TransactWriteItemsEnhancedRequest request) {
123+
TransactWriteItemsOperation operation = TransactWriteItemsOperation.create(request);
124+
return operation.executeAsync(dynamoDbClient, extension);
125+
}
126+
127+
@Override
128+
public CompletableFuture<TransactWriteItemsEnhancedResponse> transactWriteItemsWithResponse(
129+
Consumer<TransactWriteItemsEnhancedRequest.Builder> requestConsumer) {
130+
TransactWriteItemsEnhancedRequest.Builder builder = TransactWriteItemsEnhancedRequest.builder();
131+
requestConsumer.accept(builder);
132+
return transactWriteItemsWithResponse(builder.build());
133+
}
134+
119135
public DynamoDbAsyncClient dynamoDbAsyncClient() {
120136
return dynamoDbClient;
121137
}
@@ -139,8 +155,8 @@ public boolean equals(Object o) {
139155

140156
DefaultDynamoDbEnhancedAsyncClient that = (DefaultDynamoDbEnhancedAsyncClient) o;
141157

142-
if (dynamoDbClient != null ? ! dynamoDbClient.equals(that.dynamoDbClient)
143-
: that.dynamoDbClient != null) {
158+
if (dynamoDbClient != null ? !dynamoDbClient.equals(that.dynamoDbClient)
159+
: that.dynamoDbClient != null) {
144160

145161
return false;
146162
}

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/client/DefaultDynamoDbEnhancedClient.java

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import software.amazon.awssdk.enhanced.dynamodb.model.BatchWriteResult;
3636
import software.amazon.awssdk.enhanced.dynamodb.model.TransactGetItemsEnhancedRequest;
3737
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
38+
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedResponse;
3839
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
3940

4041
@SdkInternalApi
@@ -100,7 +101,8 @@ public List<Document> transactGetItems(
100101
@Override
101102
public Void transactWriteItems(TransactWriteItemsEnhancedRequest request) {
102103
TransactWriteItemsOperation operation = TransactWriteItemsOperation.create(request);
103-
return operation.execute(dynamoDbClient, extension);
104+
operation.execute(dynamoDbClient, extension);
105+
return null;
104106
}
105107

106108
@Override
@@ -110,6 +112,20 @@ public Void transactWriteItems(Consumer<TransactWriteItemsEnhancedRequest.Builde
110112
return transactWriteItems(builder.build());
111113
}
112114

115+
@Override
116+
public TransactWriteItemsEnhancedResponse transactWriteItemsWithResponse(TransactWriteItemsEnhancedRequest request) {
117+
TransactWriteItemsOperation operation = TransactWriteItemsOperation.create(request);
118+
return operation.execute(dynamoDbClient, extension);
119+
}
120+
121+
@Override
122+
public TransactWriteItemsEnhancedResponse transactWriteItemsWithResponse(
123+
Consumer<TransactWriteItemsEnhancedRequest.Builder> requestConsumer) {
124+
TransactWriteItemsEnhancedRequest.Builder builder = TransactWriteItemsEnhancedRequest.builder();
125+
requestConsumer.accept(builder);
126+
return transactWriteItemsWithResponse(builder.build());
127+
}
128+
113129
public DynamoDbClient dynamoDbClient() {
114130
return dynamoDbClient;
115131
}
@@ -133,19 +149,19 @@ public boolean equals(Object o) {
133149

134150
DefaultDynamoDbEnhancedClient that = (DefaultDynamoDbEnhancedClient) o;
135151

136-
if (dynamoDbClient != null ? ! dynamoDbClient.equals(that.dynamoDbClient) : that.dynamoDbClient != null) {
152+
if (dynamoDbClient != null ? !dynamoDbClient.equals(that.dynamoDbClient) : that.dynamoDbClient != null) {
137153
return false;
138154
}
139155
return extension != null ?
140-
extension.equals(that.extension) :
141-
that.extension == null;
156+
extension.equals(that.extension) :
157+
that.extension == null;
142158
}
143159

144160
@Override
145161
public int hashCode() {
146162
int result = dynamoDbClient != null ? dynamoDbClient.hashCode() : 0;
147163
result = 31 * result + (extension != null ?
148-
extension.hashCode() : 0);
164+
extension.hashCode() : 0);
149165
return result;
150166
}
151167

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/operations/TransactWriteItemsOperation.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,17 @@
2020
import software.amazon.awssdk.annotations.SdkInternalApi;
2121
import software.amazon.awssdk.enhanced.dynamodb.DynamoDbEnhancedClientExtension;
2222
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedRequest;
23+
import software.amazon.awssdk.enhanced.dynamodb.model.TransactWriteItemsEnhancedResponse;
2324
import software.amazon.awssdk.services.dynamodb.DynamoDbAsyncClient;
2425
import software.amazon.awssdk.services.dynamodb.DynamoDbClient;
2526
import software.amazon.awssdk.services.dynamodb.model.TransactWriteItemsRequest;
2627
import software.amazon.awssdk.services.dynamodb.model.TransactWriteItemsResponse;
2728

2829
@SdkInternalApi
2930
public class TransactWriteItemsOperation
30-
implements DatabaseOperation<TransactWriteItemsRequest, TransactWriteItemsResponse, Void> {
31+
implements DatabaseOperation<TransactWriteItemsRequest, TransactWriteItemsResponse, TransactWriteItemsEnhancedResponse> {
3132

32-
private TransactWriteItemsEnhancedRequest request;
33+
private final TransactWriteItemsEnhancedRequest request;
3334

3435
private TransactWriteItemsOperation(TransactWriteItemsEnhancedRequest request) {
3536
this.request = request;
@@ -49,18 +50,23 @@ public TransactWriteItemsRequest generateRequest(DynamoDbEnhancedClientExtension
4950
return TransactWriteItemsRequest.builder()
5051
.transactItems(this.request.transactWriteItems())
5152
.clientRequestToken(this.request.clientRequestToken())
53+
.returnConsumedCapacity(this.request.returnConsumedCapacity())
54+
.returnItemCollectionMetrics(this.request.returnItemCollectionMetrics())
5255
.build();
5356
}
5457

5558
@Override
56-
public Void transformResponse(TransactWriteItemsResponse response, DynamoDbEnhancedClientExtension extension) {
57-
return null; // this operation does not return results
59+
public TransactWriteItemsEnhancedResponse transformResponse(TransactWriteItemsResponse response,
60+
DynamoDbEnhancedClientExtension extension) {
61+
return TransactWriteItemsEnhancedResponse.builder()
62+
.consumedCapacity(response.consumedCapacity())
63+
.itemCollectionMetrics(response.itemCollectionMetrics())
64+
.build();
5865
}
5966

6067
@Override
6168
public Function<TransactWriteItemsRequest, TransactWriteItemsResponse> serviceCall(
6269
DynamoDbClient dynamoDbClient) {
63-
6470
return dynamoDbClient::transactWriteItems;
6571
}
6672

0 commit comments

Comments
 (0)