Skip to content

Commit 519ac7b

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 519ac7b

File tree

2 files changed

+36
-0
lines changed

2 files changed

+36
-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: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,37 @@ 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(DimensionSet.of("Region", "us-west-2"));
122+
123+
String serializedMetricDirective = objectMapper.writeValueAsString(metricDirective);
124+
125+
assertEquals(
126+
serializedMetricDirective,
127+
"{\"Dimensions\":[[\"Region\"]],\"Metrics\":[],\"Namespace\":\"aws-embedded-metrics\"}");
128+
}
129+
130+
@Test
131+
public void testPutMultipleDuplicateDimensionSetsOfDifferentLengths()
132+
throws JsonProcessingException {
133+
MetricDirective metricDirective = new MetricDirective();
134+
metricDirective.putDimensionSet(DimensionSet.of("Region", "us-west-2"));
135+
metricDirective.putDimensionSet(
136+
DimensionSet.of("Region", "us-east-1", "Instance", "inst-1"));
137+
metricDirective.putDimensionSet(DimensionSet.of("Region", "us-west-2"));
138+
metricDirective.putDimensionSet(
139+
DimensionSet.of("Region", "us-east-1", "Instance", "inst-1"));
140+
141+
String serializedMetricDirective = objectMapper.writeValueAsString(metricDirective);
142+
143+
assertEquals(
144+
serializedMetricDirective,
145+
"{\"Dimensions\":[[\"Region\"],[\"Region\",\"Instance\"]],\"Metrics\":[],\"Namespace\":\"aws-embedded-metrics\"}");
146+
}
147+
117148
@Test
118149
public void testGetDimensionAfterSetDimensions() {
119150
MetricDirective metricDirective = new MetricDirective();

0 commit comments

Comments
 (0)