From ea006dc72a4aea46f49470c4c55d2ca73bcf5677 Mon Sep 17 00:00:00 2001 From: Suneet Saldanha <44787917+suneet-s@users.noreply.github.com> Date: Mon, 10 Feb 2020 14:26:10 -0800 Subject: [PATCH] Optimize TimeExtractionTopNAlgorithm (#9336) When the time extraction Top N algorithm is looking for aggregators, it makes 2 calls to hashCode on the key. Use Map#computeIfAbsent instead so that the hashCode is calculated only once --- .../druid/query/topn/TimeExtractionTopNAlgorithm.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/processing/src/main/java/org/apache/druid/query/topn/TimeExtractionTopNAlgorithm.java b/processing/src/main/java/org/apache/druid/query/topn/TimeExtractionTopNAlgorithm.java index a23518a4aa9..cee1e3ac32e 100644 --- a/processing/src/main/java/org/apache/druid/query/topn/TimeExtractionTopNAlgorithm.java +++ b/processing/src/main/java/org/apache/druid/query/topn/TimeExtractionTopNAlgorithm.java @@ -98,11 +98,10 @@ public class TimeExtractionTopNAlgorithm extends BaseTopNAlgorithm key = dimensionValueConverter.apply(dimSelector.lookupName(dimSelector.getRow().get(0))); - Aggregator[] theAggregators = aggregatesStore.get(key); - if (theAggregators == null) { - theAggregators = makeAggregators(cursor, query.getAggregatorSpecs()); - aggregatesStore.put(key, theAggregators); - } + Aggregator[] theAggregators = aggregatesStore.computeIfAbsent( + key, + k -> makeAggregators(cursor, query.getAggregatorSpecs()) + ); for (Aggregator aggregator : theAggregators) { aggregator.aggregate();