|
81 | 81 | import java.util.Objects;
|
82 | 82 | import java.util.Optional;
|
83 | 83 | import java.util.Set;
|
| 84 | +import java.util.concurrent.ConcurrentHashMap; |
84 | 85 | import java.util.concurrent.ConcurrentMap;
|
85 | 86 | import java.util.concurrent.atomic.AtomicBoolean;
|
86 | 87 | import java.util.concurrent.atomic.AtomicInteger;
|
@@ -506,15 +507,15 @@ public int hashCode() {
|
506 | 507 | * */
|
507 | 508 | class IndicesRequestCacheCleanupManager implements Closeable {
|
508 | 509 | private final Set<CleanupKey> keysToClean;
|
509 |
| - private final ConcurrentMap<ShardId, ConcurrentMap<String, Integer>> cleanupKeyToCountMap; |
| 510 | + private final ConcurrentHashMap<ShardId, ConcurrentHashMap<String, Integer>> cleanupKeyToCountMap; |
510 | 511 | private final AtomicInteger staleKeysCount;
|
511 | 512 | private volatile double stalenessThreshold;
|
512 | 513 | private final IndicesRequestCacheCleaner cacheCleaner;
|
513 | 514 |
|
514 | 515 | IndicesRequestCacheCleanupManager(ThreadPool threadpool, TimeValue cleanInterval, double stalenessThreshold) {
|
515 | 516 | this.stalenessThreshold = stalenessThreshold;
|
516 | 517 | this.keysToClean = ConcurrentCollections.newConcurrentSet();
|
517 |
| - this.cleanupKeyToCountMap = ConcurrentCollections.newConcurrentMap(); |
| 518 | + this.cleanupKeyToCountMap = new ConcurrentHashMap<>(); |
518 | 519 | this.staleKeysCount = new AtomicInteger(0);
|
519 | 520 | this.cacheCleaner = new IndicesRequestCacheCleaner(this, threadpool, cleanInterval);
|
520 | 521 | threadpool.schedule(cacheCleaner, cleanInterval, ThreadPool.Names.SAME);
|
@@ -572,8 +573,13 @@ private void updateStaleCountOnCacheInsert(CleanupKey cleanupKey) {
|
572 | 573 |
|
573 | 574 | // pkg-private for testing
|
574 | 575 | void addToCleanupKeyToCountMap(ShardId shardId, String readerCacheKeyId) {
|
575 |
| - cleanupKeyToCountMap.computeIfAbsent(shardId, k -> ConcurrentCollections.newConcurrentMap()) |
576 |
| - .merge(readerCacheKeyId, 1, Integer::sum); |
| 576 | + cleanupKeyToCountMap.compute(shardId, (currentShardId, readerCacheKeyMap) -> { |
| 577 | + if (readerCacheKeyMap == null) { |
| 578 | + readerCacheKeyMap = new ConcurrentHashMap<>(); |
| 579 | + } |
| 580 | + readerCacheKeyMap.compute(readerCacheKeyId, (currentReaderCacheKeyId, count) -> (count == null) ? 1 : count + 1); |
| 581 | + return readerCacheKeyMap; |
| 582 | + }); |
577 | 583 | }
|
578 | 584 |
|
579 | 585 | /**
|
@@ -831,7 +837,7 @@ public void close() {
|
831 | 837 | }
|
832 | 838 |
|
833 | 839 | // for testing
|
834 |
| - ConcurrentMap<ShardId, ConcurrentMap<String, Integer>> getCleanupKeyToCountMap() { |
| 840 | + ConcurrentHashMap<ShardId, ConcurrentHashMap<String, Integer>> getCleanupKeyToCountMap() { |
835 | 841 | return cleanupKeyToCountMap;
|
836 | 842 | }
|
837 | 843 |
|
|
0 commit comments