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