aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLester Solbakken <lesters@oath.com>2019-03-04 16:21:00 +0100
committerLester Solbakken <lesters@oath.com>2019-03-04 16:21:00 +0100
commit0f6cdc41db8d0ad676a104875271320223da6698 (patch)
treeb91198f5abc9d783fa9b4cc6ef8154ef8da24b29
parentdfe9a2b961bbac3747d7cdd7b0fe46c31db5da0f (diff)
Don't use computeIfAbsent on CopyOnWriteHashMap
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java14
1 files changed, 11 insertions, 3 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java b/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java
index 0b24c400fea..086ceb514fa 100644
--- a/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java
@@ -202,9 +202,17 @@ public class StatisticsSearcher extends Searcher {
private Metric.Context getRelevanceMetricContext(Execution execution, Query query) {
String chain = execution.chain().getId().stringValue();
String rankProfile = query.getRanking().getProfile();
- return relevanceContexts
- .computeIfAbsent(chain, k -> new HashMap<>())
- .computeIfAbsent(rankProfile, k -> createRelevanceMetricContext(chain, rankProfile));
+ Map<String, Metric.Context> chainContext = relevanceContexts.get(chain); // CopyOnWriteHashMap - don't use computeIfAbsent
+ if (chainContext == null) {
+ chainContext = new CopyOnWriteHashMap<>();
+ relevanceContexts.put(chain, chainContext);
+ }
+ Metric.Context metricContext = chainContext.get(rankProfile);
+ if (metricContext == null) {
+ metricContext = createRelevanceMetricContext(chain, rankProfile);
+ chainContext.put(rankProfile, metricContext);
+ }
+ return metricContext;
}
/**