|
21 | 21 |
|
22 | 22 | import com.codahale.metrics.Counter; |
23 | 23 | import com.codahale.metrics.Timer; |
| 24 | +import com.github.benmanes.caffeine.cache.Cache; |
| 25 | +import com.github.benmanes.caffeine.cache.Caffeine; |
24 | 26 | import java.io.Closeable; |
25 | 27 | import java.io.File; |
26 | 28 | import java.io.FileNotFoundException; |
|
55 | 57 | import java.util.Spliterator; |
56 | 58 | import java.util.Spliterators; |
57 | 59 | import java.util.UUID; |
58 | | -import java.util.WeakHashMap; |
59 | 60 | import java.util.concurrent.Callable; |
60 | 61 | import java.util.concurrent.ConcurrentHashMap; |
61 | 62 | import java.util.concurrent.CopyOnWriteArrayList; |
@@ -246,6 +247,8 @@ public class SolrCore implements SolrInfoBean, Closeable { |
246 | 247 | private IndexReaderFactory indexReaderFactory; |
247 | 248 | private final Codec codec; |
248 | 249 | private final ConfigSet configSet; |
| 250 | + private final Cache<IndexReader.CacheKey, IndexFingerprint> perSegmentFingerprintCache = |
| 251 | + Caffeine.newBuilder().weakKeys().build(); |
249 | 252 | // singleton listener for all packages used in schema |
250 | 253 |
|
251 | 254 | private final CircuitBreakerRegistry circuitBreakerRegistry; |
@@ -276,9 +279,6 @@ public Date getStartTimeStamp() { |
276 | 279 | return startTime; |
277 | 280 | } |
278 | 281 |
|
279 | | - private final Map<IndexReader.CacheKey, IndexFingerprint> perSegmentFingerprintCache = |
280 | | - new WeakHashMap<>(); |
281 | | - |
282 | 282 | public long getStartNanoTime() { |
283 | 283 | return startNanoTime; |
284 | 284 | } |
@@ -2146,7 +2146,7 @@ public IndexFingerprint getIndexFingerprint( |
2146 | 2146 | } |
2147 | 2147 |
|
2148 | 2148 | IndexFingerprint f = null; |
2149 | | - f = perSegmentFingerprintCache.get(cacheHelper.getKey()); |
| 2149 | + f = perSegmentFingerprintCache.getIfPresent(cacheHelper.getKey()); |
2150 | 2150 | // fingerprint is either not cached or if we want fingerprint only up to a version less than |
2151 | 2151 | // maxVersionEncountered in the segment, or documents were deleted from segment for which |
2152 | 2152 | // fingerprint was cached |
@@ -2186,8 +2186,8 @@ public IndexFingerprint getIndexFingerprint( |
2186 | 2186 | } |
2187 | 2187 | if (log.isDebugEnabled()) { |
2188 | 2188 | log.debug( |
2189 | | - "Cache Size: {}, Segments Size:{}", |
2190 | | - perSegmentFingerprintCache.size(), |
| 2189 | + "Approximate perSegmentFingerprintCache Size: {}, Segments Size:{}", |
| 2190 | + perSegmentFingerprintCache.estimatedSize(), |
2191 | 2191 | searcher.getTopReaderContext().leaves().size()); |
2192 | 2192 | } |
2193 | 2193 | return f; |
|
0 commit comments