aboutsummaryrefslogtreecommitdiffstats
path: root/metrics-proxy/src/main/java/ai/vespa/metricsproxy/http
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2021-12-15 15:22:55 +0100
committerHenning Baldersheim <balder@yahoo-inc.com>2021-12-15 15:22:55 +0100
commit1bebedf2382811a25836bdd7123d024b9bbbb34f (patch)
tree13ef68d9c4dae09fbd61edcf70ce0c8f9ef67f29 /metrics-proxy/src/main/java/ai/vespa/metricsproxy/http
parentf9fcfd21fc0521341e2ec6906ffbbc74eabb3c03 (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.java5
-rw-r--r--metrics-proxy/src/main/java/ai/vespa/metricsproxy/http/metrics/MetricsV2Handler.java17
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;
}
}