void putIfAbsent(Query query, LeafReaderContext context, DocIdSet set, IndexReader.CacheHelper cacheHelper) { assert query instanceof BoostQuery == false; assert query instanceof ConstantScoreQuery == false; // under a lock to make sure that mostRecentlyUsedQueries and cache remain sync'ed lock.lock(); try { Query singleton = uniqueQueries.putIfAbsent(query, query); if (singleton == null) { onQueryCache(query, LINKED_HASHTABLE_RAM_BYTES_PER_ENTRY + QUERY_DEFAULT_RAM_BYTES_USED); } else { query = singleton; } final IndexReader.CacheKey key = cacheHelper.getKey(); LeafCache leafCache = cache.get(key); if (leafCache == null) { leafCache = new LeafCache(key); final LeafCache previous = cache.put(key, leafCache); ramBytesUsed += HASHTABLE_RAM_BYTES_PER_ENTRY; assert previous == null; // we just created a new leaf cache, need to register a close listener cacheHelper.addClosedListener(this::clearCoreCacheKey); } leafCache.putIfAbsent(query, set); evictIfNecessary(); } finally { lock.unlock(); } }
@Override protected void onQueryCache(Query filter, long ramBytesUsed) { super.onQueryCache(filter, ramBytesUsed); sharedRamBytesUsed += ramBytesUsed; }
@Override protected void onQueryCache(Query filter, long ramBytesUsed) { super.onQueryCache(filter, ramBytesUsed); sharedRamBytesUsed += ramBytesUsed; }
@Override protected void onQueryCache(Query filter, long ramBytesUsed) { super.onQueryCache(filter, ramBytesUsed); sharedRamBytesUsed += ramBytesUsed; }
@Override protected void onQueryCache(Query filter, long ramBytesUsed) { super.onQueryCache(filter, ramBytesUsed); sharedRamBytesUsed += ramBytesUsed; }
@Override protected void onQueryCache(Query filter, long ramBytesUsed) { assert Thread.holdsLock(this); super.onQueryCache(filter, ramBytesUsed); sharedRamBytesUsed += ramBytesUsed; }
void putIfAbsent(Query query, LeafReaderContext context, DocIdSet set, IndexReader.CacheHelper cacheHelper) { assert query instanceof BoostQuery == false; assert query instanceof ConstantScoreQuery == false; // under a lock to make sure that mostRecentlyUsedQueries and cache remain sync'ed lock.lock(); try { Query singleton = uniqueQueries.putIfAbsent(query, query); if (singleton == null) { onQueryCache(query, LINKED_HASHTABLE_RAM_BYTES_PER_ENTRY + QUERY_DEFAULT_RAM_BYTES_USED); } else { query = singleton; } final IndexReader.CacheKey key = cacheHelper.getKey(); LeafCache leafCache = cache.get(key); if (leafCache == null) { leafCache = new LeafCache(key); final LeafCache previous = cache.put(key, leafCache); ramBytesUsed += HASHTABLE_RAM_BYTES_PER_ENTRY; assert previous == null; // we just created a new leaf cache, need to register a close listener cacheHelper.addClosedListener(this::clearCoreCacheKey); } leafCache.putIfAbsent(query, set); evictIfNecessary(); } finally { lock.unlock(); } }
if (singleton == null) { uniqueQueries.put(query, query); onQueryCache(singleton, LINKED_HASHTABLE_RAM_BYTES_PER_ENTRY + ramBytesUsed(query)); } else { query = singleton;
if (singleton == null) { uniqueQueries.put(query, query); onQueryCache(singleton, LINKED_HASHTABLE_RAM_BYTES_PER_ENTRY + ramBytesUsed(query)); } else { query = singleton;