You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2011/12/14 16:13:36 UTC
svn commit: r1214289 - in /lucene/dev/branches/branch_3x: ./ lucene/
lucene/src/java/org/apache/lucene/search/
lucene/src/test/org/apache/lucene/search/ solr/
Author: uschindler
Date: Wed Dec 14 15:13:35 2011
New Revision: 1214289
URL: http://svn.apache.org/viewvc?rev=1214289&view=rev
Log:
LUCENE-3531: Backport adding close listeners to CachingWrapperFilter
(Merged revision(s) 1214274 from lucene/dev/trunk)
Modified:
lucene/dev/branches/branch_3x/ (props changed)
lucene/dev/branches/branch_3x/lucene/ (props changed)
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java
lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java
lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
lucene/dev/branches/branch_3x/solr/ (props changed)
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java?rev=1214289&r1=1214288&r2=1214289&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingSpanFilter.java Wed Dec 14 15:13:35 2011
@@ -81,7 +81,7 @@ public class CachingSpanFilter extends S
missCount++;
result = filter.bitSpans(reader);
- cache.put(coreKey, delCoreKey, result);
+ cache.put(reader, coreKey, delCoreKey, result);
return result;
}
Modified: lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java?rev=1214289&r1=1214288&r2=1214289&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/java/org/apache/lucene/search/CachingWrapperFilter.java Wed Dec 14 15:13:35 2011
@@ -23,6 +23,7 @@ import java.util.Map;
import java.util.WeakHashMap;
import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.SegmentReader;
import org.apache.lucene.util.FixedBitSet;
/**
@@ -63,7 +64,7 @@ public class CachingWrapperFilter extend
protected final FilterCache<DocIdSet> cache;
- static abstract class FilterCache<T> implements Serializable {
+ static abstract class FilterCache<T> implements SegmentReader.CoreClosedListener, IndexReader.ReaderClosedListener, Serializable {
/**
* A transient Filter cache (package private because of test)
@@ -112,7 +113,13 @@ public class CachingWrapperFilter extend
protected abstract T mergeDeletes(IndexReader reader, T value);
- public synchronized void put(Object coreKey, Object delCoreKey, T value) {
+ public synchronized void put(IndexReader reader, Object coreKey, Object delCoreKey, T value) {
+ if (reader instanceof SegmentReader) {
+ ((SegmentReader) reader).addCoreClosedListener(this);
+ } else {
+ reader.addReaderClosedListener(this);
+ }
+
if (deletesMode == DeletesMode.IGNORE) {
cache.put(coreKey, value);
} else if (deletesMode == DeletesMode.RECACHE) {
@@ -122,6 +129,18 @@ public class CachingWrapperFilter extend
cache.put(delCoreKey, value);
}
}
+
+ // not until Java 6: @Override
+ public synchronized void onClose(IndexReader reader) {
+ cache.remove(reader.getCoreCacheKey());
+ cache.remove(reader.getDeletesCacheKey());
+ }
+
+ // not until Java 6: @Override
+ public synchronized void onClose(SegmentReader reader) {
+ cache.remove(reader.getCoreCacheKey());
+ cache.remove(reader.getDeletesCacheKey());
+ }
}
/**
@@ -209,7 +228,7 @@ public class CachingWrapperFilter extend
docIdSet = docIdSetToCache(filter.getDocIdSet(reader), reader);
if (docIdSet != null) {
- cache.put(coreKey, delCoreKey, docIdSet);
+ cache.put(reader, coreKey, delCoreKey, docIdSet);
}
return docIdSet;
Modified: lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java?rev=1214289&r1=1214288&r2=1214289&view=diff
==============================================================================
--- lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (original)
+++ lucene/dev/branches/branch_3x/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java Wed Dec 14 15:13:35 2011
@@ -44,7 +44,7 @@ public class TestCachingWrapperFilter ex
CachingWrapperFilter cacher = new CachingWrapperFilter(filter);
// first time, nested filter is called
- cacher.getDocIdSet(reader);
+ DocIdSet strongRef = cacher.getDocIdSet(reader);
assertTrue("first time", filter.wasCalled());
// make sure no exception if cache is holding the wrong docIdSet