Skip to content

Commit 6a11ab8

Browse files
authored
Adds operation name labels for operations to identify calling op when required (#2846)
1 parent 227c639 commit 6a11ab8

29 files changed

+275
-48
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"category": "DynamoDB Enhanced Client",
3+
"contributor": "",
4+
"type": "feature",
5+
"description": "Adds operation type labels to each operation and propagates to the extension write context"
6+
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.Map;
1919
import software.amazon.awssdk.annotations.SdkPublicApi;
20+
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.OperationName;
2021
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
2122

2223
/**
@@ -57,6 +58,11 @@ default TableSchema<?> tableSchema() {
5758
*/
5859
@SdkPublicApi
5960
public interface BeforeWrite extends Context {
61+
62+
/**
63+
* @return The context under which the operation to be modified is taking place.
64+
*/
65+
OperationName operationName();
6066
}
6167

6268
/**

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/extensions/ChainExtension.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,7 @@ public WriteModification beforeWrite(DynamoDbExtensionContext.BeforeWrite contex
104104
.operationContext(context.operationContext())
105105
.tableMetadata(context.tableMetadata())
106106
.tableSchema(context.tableSchema())
107+
.operationName(context.operationName())
107108
.build();
108109

109110
WriteModification writeModification = extension.beforeWrite(beforeWrite);

services-custom/dynamodb-enhanced/src/main/java/software/amazon/awssdk/enhanced/dynamodb/internal/extensions/DefaultDynamoDbExtensionContext.java

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import software.amazon.awssdk.enhanced.dynamodb.OperationContext;
2323
import software.amazon.awssdk.enhanced.dynamodb.TableMetadata;
2424
import software.amazon.awssdk.enhanced.dynamodb.TableSchema;
25+
import software.amazon.awssdk.enhanced.dynamodb.internal.operations.OperationName;
2526
import software.amazon.awssdk.services.dynamodb.model.AttributeValue;
2627

2728
/**
@@ -35,12 +36,14 @@ public final class DefaultDynamoDbExtensionContext implements DynamoDbExtensionC
3536
private final OperationContext operationContext;
3637
private final TableMetadata tableMetadata;
3738
private final TableSchema<?> tableSchema;
39+
private final OperationName operationName;
3840

3941
private DefaultDynamoDbExtensionContext(Builder builder) {
4042
this.items = builder.items;
4143
this.operationContext = builder.operationContext;
4244
this.tableMetadata = builder.tableMetadata;
4345
this.tableSchema = builder.tableSchema;
46+
this.operationName = builder.operationName != null ? builder.operationName : OperationName.NONE;
4447
}
4548

4649
public static Builder builder() {
@@ -67,6 +70,11 @@ public TableSchema<?> tableSchema() {
6770
return tableSchema;
6871
}
6972

73+
@Override
74+
public OperationName operationName() {
75+
return operationName;
76+
}
77+
7078
@Override
7179
public boolean equals(Object o) {
7280
if (this == o) {
@@ -87,7 +95,10 @@ public boolean equals(Object o) {
8795
if (!Objects.equals(tableMetadata, that.tableMetadata)) {
8896
return false;
8997
}
90-
return Objects.equals(tableSchema, that.tableSchema);
98+
if (!Objects.equals(tableSchema, that.tableSchema)) {
99+
return false;
100+
}
101+
return Objects.equals(operationName, that.operationName);
91102
}
92103

93104
@Override
@@ -96,6 +107,7 @@ public int hashCode() {
96107
result = 31 * result + (operationContext != null ? operationContext.hashCode() : 0);
97108
result = 31 * result + (tableMetadata != null ? tableMetadata.hashCode() : 0);
98109
result = 31 * result + (tableSchema != null ? tableSchema.hashCode() : 0);
110+
result = 31 * result + (operationName != null ? operationName.hashCode() : 0);
99111
return result;
100112
}
101113

@@ -104,6 +116,7 @@ public static final class Builder {
104116
private OperationContext operationContext;
105117
private TableMetadata tableMetadata;
106118
private TableSchema<?> tableSchema;
119+
private OperationName operationName;
107120

108121
public Builder items(Map<String, AttributeValue> item) {
109122
this.items = item;
@@ -125,6 +138,11 @@ public Builder tableSchema(TableSchema<?> tableSchema) {
125138
return this;
126139
}
127140

141+
public Builder operationName(OperationName operationName) {
142+
this.operationName = operationName;
143+
return this;
144+
}
145+
128146
public DefaultDynamoDbExtensionContext build() {
129147
return new DefaultDynamoDbExtensionContext(this);
130148
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public static BatchGetItemOperation create(BatchGetItemEnhancedRequest request)
5050
return new BatchGetItemOperation(request);
5151
}
5252

53+
@Override
54+
public OperationName operationName() {
55+
return OperationName.BATCH_GET_ITEM;
56+
}
57+
5358
@Override
5459
public BatchGetItemRequest generateRequest(DynamoDbEnhancedClientExtension extension) {
5560
Map<String, KeysAndAttributes> requestItems = new HashMap<>();

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ public static BatchWriteItemOperation create(BatchWriteItemEnhancedRequest reque
4848
return new BatchWriteItemOperation(request);
4949
}
5050

51+
@Override
52+
public OperationName operationName() {
53+
return OperationName.BATCH_WRITE_ITEM;
54+
}
55+
5156
@Override
5257
public BatchWriteItemRequest generateRequest(DynamoDbEnhancedClientExtension extension) {
5358
Map<String, List<WriteRequest>> allRequestItems = new HashMap<>();

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,4 +140,9 @@ default CompletableFuture<ResultT> executeAsync(TableSchema<ItemT> tableSchema,
140140
CompletableFuture<ResponseT> response = asyncServiceCall(dynamoDbAsyncClient).apply(request);
141141
return response.thenApply(r -> transformResponse(r, tableSchema, context, extension));
142142
}
143+
144+
/**
145+
* The type, or name, of the operation.
146+
*/
147+
OperationName operationName();
143148
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,11 @@ public static <T> CreateTableOperation<T> create(CreateTableEnhancedRequest requ
5353
return new CreateTableOperation<>(request);
5454
}
5555

56+
@Override
57+
public OperationName operationName() {
58+
return OperationName.CREATE_TABLE;
59+
}
60+
5661
@Override
5762
public CreateTableRequest generateRequest(TableSchema<T> tableSchema,
5863
OperationContext operationContext,

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,4 +103,10 @@ default CompletableFuture<ResultT> executeAsync(DynamoDbAsyncClient dynamoDbAsyn
103103
CompletableFuture<ResponseT> response = asyncServiceCall(dynamoDbAsyncClient).apply(request);
104104
return response.thenApply(r -> transformResponse(r, extension));
105105
}
106+
107+
108+
/**
109+
* The type, or name, of the operation.
110+
*/
111+
OperationName operationName();
106112
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ public static <T> DeleteItemOperation<T> create(TransactDeleteItemEnhancedReques
6666
return new DeleteItemOperation<>(request);
6767
}
6868

69+
@Override
70+
public OperationName operationName() {
71+
return OperationName.DELETE_ITEM;
72+
}
73+
6974
@Override
7075
public DeleteItemRequest generateRequest(TableSchema<T> tableSchema,
7176
OperationContext operationContext,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public static <T> DeleteTableOperation<T> create() {
3636
return new DeleteTableOperation<>();
3737
}
3838

39+
@Override
40+
public OperationName operationName() {
41+
return OperationName.DELETE_ITEM;
42+
}
43+
3944
@Override
4045
public DeleteTableRequest generateRequest(TableSchema<T> tableSchema,
4146
OperationContext operationContext,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public static <T> DescribeTableOperation<T> create() {
3636
return new DescribeTableOperation<>();
3737
}
3838

39+
@Override
40+
public OperationName operationName() {
41+
return OperationName.DESCRIBE_TABLE;
42+
}
43+
3944
@Override
4045
public DescribeTableRequest generateRequest(TableSchema<T> tableSchema,
4146
OperationContext operationContext,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,11 @@ public Key key() {
5757
return this.request.key();
5858
}
5959

60+
@Override
61+
public OperationName operationName() {
62+
return OperationName.GET_ITEM;
63+
}
64+
6065
@Override
6166
public GetItemRequest generateRequest(TableSchema<T> tableSchema,
6267
OperationContext context,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
/*
2+
* Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License").
5+
* You may not use this file except in compliance with the License.
6+
* A copy of the License is located at
7+
*
8+
* http://aws.amazon.com/apache2.0
9+
*
10+
* or in the "license" file accompanying this file. This file is distributed
11+
* on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
12+
* express or implied. See the License for the specific language governing
13+
* permissions and limitations under the License.
14+
*/
15+
16+
package software.amazon.awssdk.enhanced.dynamodb.internal.operations;
17+
18+
import software.amazon.awssdk.annotations.SdkInternalApi;
19+
20+
@SdkInternalApi
21+
public enum OperationName {
22+
NONE(null),
23+
BATCH_GET_ITEM("BatchGetItem"),
24+
BATCH_WRITE_ITEM("BatchWriteItem"),
25+
CREATE_TABLE("CreateTable"),
26+
DELETE_ITEM("DeleteItem"),
27+
DELETE_TABLE("DeleteTable"),
28+
DESCRIBE_TABLE("DescribeTable"),
29+
GET_ITEM("GetItem"),
30+
QUERY("Query"),
31+
PUT_ITEM("PutItem"),
32+
SCAN("Scan"),
33+
TRANSACT_GET_ITEMS("TransactGetItems"),
34+
TRANSACT_WRITE_ITEMS("TransactWriteItems"),
35+
UPDATE_ITEM("UpdateItem");
36+
37+
private final String label;
38+
39+
OperationName() {
40+
this.label = null;
41+
}
42+
43+
OperationName(String label) {
44+
this.label = label;
45+
}
46+
47+
public String label() {
48+
return label;
49+
}
50+
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,9 @@ default SdkPublisher<ResultT> executeAsync(DynamoDbAsyncClient dynamoDbAsyncClie
110110
SdkPublisher<ResponseT> response = asyncServiceCall(dynamoDbAsyncClient).apply(request);
111111
return response.map(r -> transformResponse(r, extension));
112112
}
113+
114+
/**
115+
* The type, or name, of the operation.
116+
*/
117+
OperationName operationName();
113118
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,4 +82,9 @@ default PagePublisher<ItemT> executeOnPrimaryIndexAsync(TableSchema<ItemT> table
8282
OperationContext context = DefaultOperationContext.create(tableName, TableMetadata.primaryIndexName());
8383
return executeAsync(tableSchema, context, extension, dynamoDbAsyncClient);
8484
}
85+
86+
/**
87+
* The type, or name, of the operation.
88+
*/
89+
OperationName operationName();
8590
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ public static <T> PutItemOperation<T> create(TransactPutItemEnhancedRequest<T> r
6666
return new PutItemOperation<>(request);
6767
}
6868

69+
@Override
70+
public OperationName operationName() {
71+
return OperationName.PUT_ITEM;
72+
}
73+
6974
@Override
7075
public PutItemRequest generateRequest(TableSchema<T> tableSchema,
7176
OperationContext operationContext,
@@ -91,6 +96,7 @@ public PutItemRequest generateRequest(TableSchema<T> tableSchema,
9196
.operationContext(operationContext)
9297
.tableMetadata(tableMetadata)
9398
.tableSchema(tableSchema)
99+
.operationName(operationName())
94100
.build())
95101
: null;
96102

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,11 @@ public static <T> QueryOperation<T> create(QueryEnhancedRequest request) {
4949
return new QueryOperation<>(request);
5050
}
5151

52+
@Override
53+
public OperationName operationName() {
54+
return OperationName.QUERY;
55+
}
56+
5257
@Override
5358
public QueryRequest generateRequest(TableSchema<T> tableSchema,
5459
OperationContext operationContext,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ public static <T> ScanOperation<T> create(ScanEnhancedRequest request) {
5050
return new ScanOperation<>(request);
5151
}
5252

53+
@Override
54+
public OperationName operationName() {
55+
return OperationName.SCAN;
56+
}
57+
5358
@Override
5459
public ScanRequest generateRequest(TableSchema<T> tableSchema,
5560
OperationContext operationContext,

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public static TransactGetItemsOperation create(TransactGetItemsEnhancedRequest r
4343
return new TransactGetItemsOperation(request);
4444
}
4545

46+
@Override
47+
public OperationName operationName() {
48+
return OperationName.TRANSACT_GET_ITEMS;
49+
}
50+
4651
@Override
4752
public TransactGetItemsRequest generateRequest(DynamoDbEnhancedClientExtension extension) {
4853
return TransactGetItemsRequest.builder()

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,11 @@ public static TransactWriteItemsOperation create(TransactWriteItemsEnhancedReque
3939
return new TransactWriteItemsOperation(request);
4040
}
4141

42+
@Override
43+
public OperationName operationName() {
44+
return OperationName.TRANSACT_WRITE_ITEMS;
45+
}
46+
4247
@Override
4348
public TransactWriteItemsRequest generateRequest(DynamoDbEnhancedClientExtension extension) {
4449
return TransactWriteItemsRequest.builder()

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

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,11 @@ public static <T> UpdateItemOperation<T> create(TransactUpdateItemEnhancedReques
8484
return new UpdateItemOperation<>(request);
8585
}
8686

87+
@Override
88+
public OperationName operationName() {
89+
return OperationName.UPDATE_ITEM;
90+
}
91+
8792
@Override
8893
public UpdateItemRequest generateRequest(TableSchema<T> tableSchema,
8994
OperationContext operationContext,
@@ -103,11 +108,12 @@ public UpdateItemRequest generateRequest(TableSchema<T> tableSchema,
103108
WriteModification transformation =
104109
extension != null
105110
? extension.beforeWrite(DefaultDynamoDbExtensionContext.builder()
106-
.items(itemMap)
107-
.operationContext(operationContext)
108-
.tableMetadata(tableMetadata)
109-
.tableSchema(tableSchema)
110-
.build())
111+
.items(itemMap)
112+
.operationContext(operationContext)
113+
.tableMetadata(tableMetadata)
114+
.tableSchema(tableSchema)
115+
.operationName(operationName())
116+
.build())
111117
: null;
112118

113119
if (transformation != null && transformation.transformedItem() != null) {

0 commit comments

Comments
 (0)