diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-12-15 15:22:55 +0100 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-12-15 15:22:55 +0100 |
commit | 1bebedf2382811a25836bdd7123d024b9bbbb34f (patch) | |
tree | 13ef68d9c4dae09fbd61edcf70ce0c8f9ef67f29 /metrics-proxy/src/main/java/ai/vespa/metricsproxy/http | |
parent | f9fcfd21fc0521341e2ec6906ffbbc74eabb3c03 (diff) |
Zero out the builders as soon as they are used to avoid keeping both alive when building a large array.
Diffstat (limited to 'metrics-proxy/src/main/java/ai/vespa/metricsproxy/http')
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java | 5 | ||||
-rw-r--r-- | metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/metrics/MetricsV2Handler.java | 17 |
2 files changed, 13 insertions, 9 deletions
diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java index 8d5c1655df0..8f7f1c8a779 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/ValuesFetcher.java @@ -47,13 +47,14 @@ public class ValuesFetcher { .collect(Collectors.toList()); } - public List<MetricsPacket.Builder> fetchMetricsAsBuilders(String requestedConsumer) throws JsonRenderingException { + public MetricsPacket.Builder [] fetchMetricsAsBuilders(String requestedConsumer) throws JsonRenderingException { ConsumerId consumer = getConsumerOrDefault(requestedConsumer, metricsConsumers); - return metricsManager.getMetricsAsBuilders(vespaServices.getVespaServices(), Instant.now()) + List<MetricsPacket.Builder> builders = metricsManager.getMetricsAsBuilders(vespaServices.getVespaServices(), Instant.now()) .stream() .filter(builder -> builder.hasConsumer(consumer)) .collect(Collectors.toList()); + return builders.toArray(new MetricsPacket.Builder[builders.size()]); } diff --git a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/metrics/MetricsV2Handler.java b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/metrics/MetricsV2Handler.java index eef5d9aaf98..f58c63cd76c 100644 --- a/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/metrics/MetricsV2Handler.java +++ b/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/metrics/MetricsV2Handler.java @@ -19,6 +19,7 @@ import com.yahoo.container.jdisc.HttpResponse; import com.yahoo.restapi.Path; import java.net.URI; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; @@ -66,8 +67,7 @@ public class MetricsV2Handler extends HttpHandlerBase { private JsonResponse valuesResponse(String consumer) { try { - List<MetricsPacket.Builder> builders = valuesFetcher.fetchMetricsAsBuilders(consumer); - List<MetricsPacket> metrics = processAndBuild(builders, + List<MetricsPacket> metrics = processAndBuild(valuesFetcher.fetchMetricsAsBuilders(consumer), new ServiceIdDimensionProcessor(), new ClusterIdDimensionProcessor(), new PublicDimensionsProcessor(MAX_DIMENSIONS)); @@ -81,12 +81,15 @@ public class MetricsV2Handler extends HttpHandlerBase { } } - private static List<MetricsPacket> processAndBuild(List<MetricsPacket.Builder> builders, + private static List<MetricsPacket> processAndBuild(MetricsPacket.Builder [] builders, MetricsProcessor... processors) { - return builders.stream() - .map(builder -> applyProcessors(builder, processors)) - .map(MetricsPacket.Builder::build) - .collect(toList()); + List<MetricsPacket> metricsPackets = new ArrayList<>(builders.length); + for (int i = 0; i < builders.length; i++) { + applyProcessors(builders[i], processors); + metricsPackets.add(builders[i].build()); + builders[i] = null; // Set null to be able to GC the builder when packet has been created + } + return metricsPackets; } } |