From 020eb72d22540f5392730fe5173ca2da9520372d Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Fri, 16 Dec 2022 18:34:18 +0100 Subject: Use a set instead to detect uniqueness. --- .../java/ai/vespa/metricsproxy/service/MetricsParser.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'metrics-proxy/src') diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java index cdb87e76148..e24c7428157 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/service/MetricsParser.java @@ -15,8 +15,10 @@ import java.nio.charset.StandardCharsets; import java.time.Instant; import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import static ai.vespa.metricsproxy.metric.model.DimensionId.toDimensionId; @@ -107,7 +109,7 @@ public class MetricsParser { throw new IOException("Expected start of 'metrics:values' array, got " + parser.currentToken()); } - Map> uniqueDimensions = new HashMap<>(); + Map, Map> uniqueDimensions = new HashMap<>(); while (parser.nextToken() == JsonToken.START_OBJECT) { handleValue(parser, timestamp, consumer, uniqueDimensions); } @@ -115,7 +117,7 @@ public class MetricsParser { // One item in the 'values' array, where each item has 'name', 'values' and 'dimensions' static private void handleValue(JsonParser parser, Instant timestamp, Collector consumer, - Map> uniqueDimensions) throws IOException { + Map, Map> uniqueDimensions) throws IOException { String name = ""; String description = ""; Map dim = Map.of(); @@ -143,9 +145,9 @@ public class MetricsParser { } private static Map parseDimensions(JsonParser parser, - Map> uniqueDimensions) throws IOException { + Map, Map> uniqueDimensions) throws IOException { - List dimensions = new ArrayList<>(); + Set dimensions = new HashSet<>(); for (parser.nextToken(); parser.getCurrentToken() != JsonToken.END_OBJECT; parser.nextToken()) { String fieldName = parser.getCurrentName(); @@ -160,7 +162,7 @@ public class MetricsParser { throw new IllegalArgumentException("Dimension '" + fieldName + "' must be a string"); } } - return uniqueDimensions.computeIfAbsent(dimensionsHashCode(dimensions), + return uniqueDimensions.computeIfAbsent(dimensions, key -> dimensions.stream().collect(Collectors.toUnmodifiableMap( dim -> toDimensionId(dim.id), dim -> dim.value))); } -- cgit v1.2.3