diff options
author | Lester Solbakken <lesters@oath.com> | 2019-03-04 16:21:00 +0100 |
---|---|---|
committer | Lester Solbakken <lesters@oath.com> | 2019-03-04 16:21:00 +0100 |
commit | 0f6cdc41db8d0ad676a104875271320223da6698 (patch) | |
tree | b91198f5abc9d783fa9b4cc6ef8154ef8da24b29 /container-search/src | |
parent | dfe9a2b961bbac3747d7cdd7b0fe46c31db5da0f (diff) |
Don't use computeIfAbsent on CopyOnWriteHashMap
Diffstat (limited to 'container-search/src')
-rw-r--r-- | container-search/src/main/java/com/yahoo/prelude/statistics/StatisticsSearcher.java | 14 |
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; } /** |