Skip to content

Commit 314fe00

Browse files
committed
Refactor caching logic, add test coverage
1 parent 6fc8e69 commit 314fe00

3 files changed

Lines changed: 24 additions & 1 deletion

File tree

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 DynamoDB Enhanced Client",
4+
"contributor": "",
5+
"description": "Improved performance by caching partition and sort key name lookups in StaticTableMetadata."
6+
}

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

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,13 @@ public <T> Optional<T> customMetadataObject(String key, Class<? extends T> objec
8787

8888
@Override
8989
public List<String> indexPartitionKeys(String indexName) {
90-
return partitionKeyCache.computeIfAbsent(indexName, this::computePartitionKeys);
90+
List<String> cached = partitionKeyCache.get(indexName);
91+
if (cached != null) {
92+
return cached;
93+
}
94+
List<String> computedKeys = computePartitionKeys(indexName);
95+
List<String> existingKeys = partitionKeyCache.putIfAbsent(indexName, computedKeys);
96+
return existingKeys == null ? computedKeys : existingKeys;
9197
}
9298

9399
private List<String> computePartitionKeys(String indexName) {

services-custom/dynamodb-enhanced/src/test/java/software/amazon/awssdk/enhanced/dynamodb/mapper/StaticTableMetadataTest.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -397,6 +397,17 @@ public void indexSortKeys_shouldReturnUnmodifiableList() {
397397
assertThatThrownBy(() -> result.add("foo")).isInstanceOf(UnsupportedOperationException.class);
398398
}
399399

400+
@Test
401+
public void indexPartitionKeys_shouldReturnUnmodifiableList() {
402+
StaticTableMetadata metadata = StaticTableMetadata.builder()
403+
.addIndexPartitionKey(primaryIndexName(),
404+
ATTRIBUTE_NAME,
405+
AttributeValueType.S)
406+
.build();
407+
List<String> result = metadata.indexPartitionKeys(primaryIndexName());
408+
assertThatThrownBy(() -> result.add("foo")).isInstanceOf(UnsupportedOperationException.class);
409+
}
410+
400411
@Test
401412
public void getIndexKeys_partitionAndSort() {
402413
TableMetadata tableMetadata = StaticTableMetadata.builder()

0 commit comments

Comments
 (0)