From 9c9cec88f9c54113e1b7188a85f3437a4f8d1224 Mon Sep 17 00:00:00 2001 From: kimchy Date: Sun, 22 May 2011 01:15:23 +0300 Subject: [PATCH] add explicit filter clears on reader finished --- .../support/AbstractConcurrentMapFilterCache.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/modules/elasticsearch/src/main/java/org/elasticsearch/index/cache/filter/support/AbstractConcurrentMapFilterCache.java b/modules/elasticsearch/src/main/java/org/elasticsearch/index/cache/filter/support/AbstractConcurrentMapFilterCache.java index fcefb71dca11a..9eb08ef446242 100644 --- a/modules/elasticsearch/src/main/java/org/elasticsearch/index/cache/filter/support/AbstractConcurrentMapFilterCache.java +++ b/modules/elasticsearch/src/main/java/org/elasticsearch/index/cache/filter/support/AbstractConcurrentMapFilterCache.java @@ -49,7 +49,7 @@ * * @author kimchy (shay.banon) */ -public abstract class AbstractConcurrentMapFilterCache extends AbstractIndexComponent implements FilterCache { +public abstract class AbstractConcurrentMapFilterCache extends AbstractIndexComponent implements FilterCache, IndexReader.ReaderFinishedListener { final ConcurrentMap cache; @@ -97,6 +97,14 @@ protected ConcurrentMap buildFilterMap() { cache.clear(); } + @Override public void finished(IndexReader reader) { + ReaderValue readerValue = cache.remove(reader.getCoreCacheKey()); + // help soft/weak handling GC + if (readerValue != null) { + readerValue.filters().clear(); + } + } + @Override public void clear(IndexReader reader) { ReaderValue readerValue = cache.remove(reader.getCoreCacheKey()); // help soft/weak handling GC @@ -156,6 +164,8 @@ static class FilterCacheFilterWrapper extends Filter { ReaderValue prev = cache.cache.putIfAbsent(reader.getCoreCacheKey(), readerValue); if (prev != null) { readerValue = prev; + } else { + reader.addReaderFinishedListener(cache); } } DocSet docSet = readerValue.filters().get(filter);