From 696d3f0833e54585cdf71150e6a01feba07a8385 Mon Sep 17 00:00:00 2001 From: jack-berg <34418638+jack-berg@users.noreply.github.com> Date: Wed, 22 Feb 2023 10:08:59 -0600 Subject: [PATCH] Optimize DefaultSynchronousMetricStorage iteration (#5183) * Optimize DefaultSynchronousMetricStorage iteration * Switch to foreach --- .../DefaultSynchronousMetricStorage.java | 25 +++++++++---------- 1 file changed, 12 insertions(+), 13 deletions(-) diff --git a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java index 62a16c93922..b329af3c892 100644 --- a/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java +++ b/sdk/metrics/src/main/java/io/opentelemetry/sdk/metrics/internal/state/DefaultSynchronousMetricStorage.java @@ -22,7 +22,6 @@ import io.opentelemetry.sdk.resources.Resource; import java.util.ArrayList; import java.util.List; -import java.util.Map; import java.util.Objects; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; @@ -131,18 +130,18 @@ public MetricData collect( // Grab aggregated points. List points = new ArrayList<>(aggregatorHandles.size()); - for (Map.Entry> entry : aggregatorHandles.entrySet()) { - T point = entry.getValue().aggregateThenMaybeReset(start, epochNanos, entry.getKey(), reset); - if (reset) { - aggregatorHandles.remove(entry.getKey(), entry.getValue()); - // Return the aggregator to the pool. - aggregatorHandlePool.offer(entry.getValue()); - } - if (point == null) { - continue; - } - points.add(point); - } + aggregatorHandles.forEach( + (attributes, handle) -> { + T point = handle.aggregateThenMaybeReset(start, epochNanos, attributes, reset); + if (reset) { + aggregatorHandles.remove(attributes, handle); + // Return the aggregator to the pool. + aggregatorHandlePool.offer(handle); + } + if (point != null) { + points.add(point); + } + }); // Trim pool down if needed. pool.size() will only exceed MAX_CARDINALITY if new handles are // created during collection.