You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2010/08/25 12:54:32 UTC

svn commit: r989004 - /lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java

Author: mikemccand
Date: Wed Aug 25 10:54:32 2010
New Revision: 989004

URL: http://svn.apache.org/viewvc?rev=989004&view=rev
Log:
cut test over to SMS and also try to prevent GC from clearing CachingWrapperFilter's cache entry

Modified:
    lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java

Modified: lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java?rev=989004&r1=989003&r2=989004&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java (original)
+++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/search/TestCachingWrapperFilter.java Wed Aug 25 10:54:32 2010
@@ -24,8 +24,8 @@ import org.apache.lucene.index.IndexRead
 import org.apache.lucene.index.Term;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
-import org.apache.lucene.index.MergeScheduler;
-import org.apache.lucene.index.ConcurrentMergeScheduler;
+import org.apache.lucene.analysis.MockAnalyzer;
+import org.apache.lucene.index.SerialMergeScheduler;
 import org.apache.lucene.index.RandomIndexWriter;
 import org.apache.lucene.index.SlowMultiReaderWrapper;
 import org.apache.lucene.store.Directory;
@@ -160,15 +160,8 @@ public class TestCachingWrapperFilter ex
 
   public void testEnforceDeletions() throws Exception {
     Directory dir = newDirectory(rand);
-    RandomIndexWriter writer = new RandomIndexWriter(rand, dir);
-
-    MergeScheduler ms = writer.w.getMergeScheduler();
-    ConcurrentMergeScheduler cms;
-    if (ms instanceof ConcurrentMergeScheduler) {
-      cms = (ConcurrentMergeScheduler) ms;
-    } else {
-      cms = null;
-    }
+    RandomIndexWriter writer = new RandomIndexWriter(rand, dir,
+                                                     newIndexWriterConfig(rand, TEST_VERSION_CURRENT, new MockAnalyzer()).setMergeScheduler(new SerialMergeScheduler()));
 
     // NOTE: cannot use writer.getReader because RIW (on
     // flipping a coin) may give us a newly opened reader,
@@ -182,9 +175,6 @@ public class TestCachingWrapperFilter ex
     doc.add(new Field("id", "1", Field.Store.YES, Field.Index.NOT_ANALYZED));
     writer.addDocument(doc);
 
-    if (cms != null) {
-      cms.sync();
-    }
     reader = refreshReader(reader);
     searcher = new IndexSearcher(reader);
 
@@ -205,9 +195,6 @@ public class TestCachingWrapperFilter ex
     // now delete the doc, refresh the reader, and see that it's not there
     writer.deleteDocuments(new Term("id", "1"));
 
-    if (cms != null) {
-      cms.sync();
-    }
     reader = refreshReader(reader);
     searcher = new IndexSearcher(reader);
 
@@ -223,27 +210,26 @@ public class TestCachingWrapperFilter ex
 
     writer.addDocument(doc);
 
-    if (cms != null) {
-      cms.sync();
-    }
     reader = refreshReader(reader);
     searcher = new IndexSearcher(reader);
         
     docs = searcher.search(new MatchAllDocsQuery(), filter, 1);
+
     assertEquals("[query + filter] Should find a hit...", 1, docs.totalHits);
 
     constantScore = new ConstantScoreQuery(filter);
     docs = searcher.search(constantScore, 1);
     assertEquals("[just filter] Should find a hit...", 1, docs.totalHits);
 
+    // NOTE: important to hold ref here so GC doesn't clear
+    // the cache entry!  Else the assert below may sometimes
+    // fail:
+    IndexReader oldReader = reader;
+
     // make sure we get a cache hit when we reopen reader
     // that had no change to deletions
-    if (cms != null) {
-      cms.sync();
-    }
-    IndexReader newReader = refreshReader(reader);
-    assertTrue(reader != newReader);
-    reader = newReader;
+    reader = refreshReader(reader);
+    assertTrue(reader != oldReader);
     searcher = new IndexSearcher(reader);
     int missCount = filter.missCount;
     docs = searcher.search(constantScore, 1);
@@ -253,9 +239,6 @@ public class TestCachingWrapperFilter ex
     // now delete the doc, refresh the reader, and see that it's not there
     writer.deleteDocuments(new Term("id", "1"));
 
-    if (cms != null) {
-      cms.sync();
-    }
     reader = refreshReader(reader);
     searcher = new IndexSearcher(reader);
 
@@ -271,9 +254,6 @@ public class TestCachingWrapperFilter ex
     filter = new CachingWrapperFilter(startFilter, CachingWrapperFilter.DeletesMode.DYNAMIC);
 
     writer.addDocument(doc);
-    if (cms != null) {
-      cms.sync();
-    }
     reader = refreshReader(reader);
     searcher = new IndexSearcher(reader);
         
@@ -286,9 +266,6 @@ public class TestCachingWrapperFilter ex
     // now delete the doc, refresh the reader, and see that it's not there
     writer.deleteDocuments(new Term("id", "1"));
 
-    if (cms != null) {
-      cms.sync();
-    }
     reader = refreshReader(reader);
     searcher = new IndexSearcher(reader);
 
@@ -301,6 +278,13 @@ public class TestCachingWrapperFilter ex
 
     // doesn't count as a miss
     assertEquals(missCount, filter.missCount);
+
+    // NOTE: silliness to make sure JRE does not optimize
+    // away our holding onto oldReader to prevent
+    // CachingWrapperFilter's WeakHashMap from dropping the
+    // entry:
+    assertTrue(oldReader != null);
+
     reader.close();
     writer.close();
     dir.close();