Skip to content

Commit 49bc5c5

Browse files
author
Aaron Michael Lamb
committed
fix: prevent putDimensions from storing duplicate dimensions
This is the Java-equivalent bug-fix for prior issue in Node: awslabs/aws-embedded-metrics-node#20 New conditions check for any matching dimension set before skipping put dimensions. This prevents duplicates from being stored. [TESTING] Unit test updated to address edge case; multiple dimension sets of variable size are added and checked. Ran integration tests using Docker and compared results in CloudWatch.
1 parent c895e9f commit 49bc5c5

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

src/main/java/software/amazon/cloudwatchlogs/emf/model/MetricDirective.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,11 @@ class MetricDirective {
5252
}
5353

5454
void putDimensionSet(DimensionSet dimensionSet) {
55+
if (dimensions.stream()
56+
.anyMatch(dim -> dim.getDimensionKeys().equals(dimensionSet.getDimensionKeys()))) {
57+
return;
58+
}
59+
5560
dimensions.add(dimensionSet);
5661
}
5762

src/test/java/software/amazon/cloudwatchlogs/emf/model/MetricDirectiveTest.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,29 @@ public void testPutMultipleDimensionSets() throws JsonProcessingException {
114114
"{\"Dimensions\":[[\"Region\"],[\"Instance\"]],\"Metrics\":[],\"Namespace\":\"aws-embedded-metrics\"}");
115115
}
116116

117+
@Test
118+
public void testPutMultipleDuplicateDimensionSets() throws JsonProcessingException {
119+
MetricDirective metricDirective = new MetricDirective();
120+
metricDirective.putDimensionSet(DimensionSet.of("Region", "us-east-1"));
121+
metricDirective.putDimensionSet(
122+
DimensionSet.of("Region", "us-east-1", "Instance", "inst-1"));
123+
metricDirective.putDimensionSet(
124+
DimensionSet.of("Instance", "inst-1", "Region", "us-east-1"));
125+
metricDirective.putDimensionSet(DimensionSet.of("Instance", "inst-1"));
126+
metricDirective.putDimensionSet(DimensionSet.of("Region", "us-east-1"));
127+
metricDirective.putDimensionSet(
128+
DimensionSet.of("Region", "us-east-1", "Instance", "inst-1"));
129+
metricDirective.putDimensionSet(
130+
DimensionSet.of("Instance", "inst-1", "Region", "us-east-1"));
131+
metricDirective.putDimensionSet(DimensionSet.of("Instance", "inst-1"));
132+
133+
String serializedMetricDirective = objectMapper.writeValueAsString(metricDirective);
134+
135+
assertEquals(
136+
serializedMetricDirective,
137+
"{\"Dimensions\":[[\"Region\"],[\"Region\",\"Instance\"],[\"Instance\"]],\"Metrics\":[],\"Namespace\":\"aws-embedded-metrics\"}");
138+
}
139+
117140
@Test
118141
public void testGetDimensionAfterSetDimensions() {
119142
MetricDirective metricDirective = new MetricDirective();

0 commit comments

Comments
 (0)