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();