You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2011/12/15 06:11:30 UTC
svn commit: r1214623 [8/17] - in /lucene/dev/branches/solrcloud: ./
dev-tools/idea/lucene/contrib/ lucene/ lucene/contrib/
lucene/contrib/demo/src/java/org/apache/lucene/demo/
lucene/contrib/highlighter/src/java/org/apache/lucene/search/vectorhighlight...
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java?rev=1214623&r1=1214622&r2=1214623&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReader.java Thu Dec 15 05:11:14 2011
@@ -25,10 +25,9 @@ import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
-import java.util.Map;
-import java.util.HashMap;
import java.util.Random;
-import org.junit.Assume;
+import java.util.Set;
+
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.BinaryField;
import org.apache.lucene.document.Document;
@@ -37,79 +36,21 @@ import org.apache.lucene.document.FieldT
import org.apache.lucene.document.StringField;
import org.apache.lucene.document.TextField;
import org.apache.lucene.index.IndexReader.FieldOption;
-import org.apache.lucene.index.codecs.lucene40.Lucene40PostingsFormat;
import org.apache.lucene.index.IndexWriterConfig.OpenMode;
+import org.apache.lucene.index.codecs.lucene40.Lucene40PostingsFormat;
import org.apache.lucene.search.DocIdSetIterator;
import org.apache.lucene.search.FieldCache;
-import org.apache.lucene.search.similarities.DefaultSimilarity;
-import org.apache.lucene.store.AlreadyClosedException;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.store.NoSuchDirectoryException;
-import org.apache.lucene.store.LockReleaseFailedException;
+import org.apache.lucene.util.Bits;
+import org.apache.lucene.util.BytesRef;
import org.apache.lucene.util.LuceneTestCase;
import org.apache.lucene.util._TestUtil;
-import org.apache.lucene.util.BytesRef;
-import org.apache.lucene.util.Bits;
-
-public class TestIndexReader extends LuceneTestCase
-{
-
- public void testCommitUserData() throws Exception {
- Directory d = newDirectory();
-
- Map<String,String> commitUserData = new HashMap<String,String>();
- commitUserData.put("foo", "fighters");
-
- // set up writer
- IndexWriter writer = new IndexWriter(d, newIndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random))
- .setMaxBufferedDocs(2));
- for(int i=0;i<27;i++)
- addDocumentWithFields(writer);
- writer.close();
-
- IndexReader r = IndexReader.open(d, false);
- r.deleteDocument(5);
- r.flush(commitUserData);
- IndexCommit c = r.getIndexCommit();
- r.close();
-
- SegmentInfos sis = new SegmentInfos();
- sis.read(d);
- IndexReader r2 = IndexReader.open(d, false);
- assertEquals(c.getUserData(), commitUserData);
-
- assertEquals(sis.getCurrentSegmentFileName(), c.getSegmentsFileName());
-
- // Change the index
- writer = new IndexWriter(d, newIndexWriterConfig(TEST_VERSION_CURRENT,
- new MockAnalyzer(random)).setOpenMode(
- OpenMode.APPEND).setMaxBufferedDocs(2));
- for(int i=0;i<7;i++)
- addDocumentWithFields(writer);
- writer.close();
-
- IndexReader r3 = IndexReader.openIfChanged(r2);
- assertNotNull(r3);
- assertFalse(c.equals(r3.getIndexCommit()));
- assertFalse(r2.getIndexCommit().getSegmentCount() == 1 && !r2.hasDeletions());
- r3.close();
-
- writer = new IndexWriter(d, newIndexWriterConfig(TEST_VERSION_CURRENT,
- new MockAnalyzer(random))
- .setOpenMode(OpenMode.APPEND));
- writer.forceMerge(1);
- writer.close();
+import org.junit.Assume;
- r3 = IndexReader.openIfChanged(r2);
- assertNotNull(r3);
- assertEquals(1, r3.getIndexCommit().getSegmentCount());
- r2.close();
- r3.close();
- d.close();
- }
-
+public class TestIndexReader extends LuceneTestCase {
+
public void testIsCurrent() throws Exception {
Directory d = newDirectory();
IndexWriter writer = new IndexWriter(d, newIndexWriterConfig(
@@ -117,7 +58,7 @@ public class TestIndexReader extends Luc
addDocumentWithFields(writer);
writer.close();
// set up reader:
- IndexReader reader = IndexReader.open(d, false);
+ IndexReader reader = IndexReader.open(d);
assertTrue(reader.isCurrent());
// modify index by adding another document:
writer = new IndexWriter(d, newIndexWriterConfig(TEST_VERSION_CURRENT,
@@ -160,7 +101,7 @@ public class TestIndexReader extends Luc
writer.close();
// set up reader
- IndexReader reader = IndexReader.open(d, false);
+ IndexReader reader = IndexReader.open(d);
Collection<String> fieldNames = reader.getFieldNames(IndexReader.FieldOption.ALL);
assertTrue(fieldNames.contains("keyword"));
assertTrue(fieldNames.contains("text"));
@@ -220,7 +161,7 @@ public class TestIndexReader extends Luc
writer.close();
// verify fields again
- reader = IndexReader.open(d, false);
+ reader = IndexReader.open(d);
fieldNames = reader.getFieldNames(IndexReader.FieldOption.ALL);
assertEquals(13, fieldNames.size()); // the following fields
assertTrue(fieldNames.contains("keyword"));
@@ -355,7 +296,7 @@ public class TestIndexReader extends Luc
doc.add(new TextField("junk", "junk text"));
writer.addDocument(doc);
writer.close();
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
Document doc2 = reader.document(reader.maxDoc() - 1);
IndexableField[] fields = doc2.getFields("bin1");
assertNotNull(fields);
@@ -374,7 +315,7 @@ public class TestIndexReader extends Luc
writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND).setMergePolicy(newLogMergePolicy()));
writer.forceMerge(1);
writer.close();
- reader = IndexReader.open(dir, false);
+ reader = IndexReader.open(dir);
doc2 = reader.document(reader.maxDoc() - 1);
fields = doc2.getFields("bin1");
assertNotNull(fields);
@@ -390,170 +331,6 @@ public class TestIndexReader extends Luc
dir.close();
}
- // Make sure attempts to make changes after reader is
- // closed throws IOException:
- public void testChangesAfterClose() throws IOException {
- Directory dir = newDirectory();
-
- IndexWriter writer = null;
- IndexReader reader = null;
- Term searchTerm = new Term("content", "aaa");
-
- // add 11 documents with term : aaa
- writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- for (int i = 0; i < 11; i++) {
- addDoc(writer, searchTerm.text());
- }
- writer.close();
-
- reader = IndexReader.open(dir, false);
-
- // Close reader:
- reader.close();
-
- // Then, try to make changes:
- try {
- reader.deleteDocument(4);
- fail("deleteDocument after close failed to throw IOException");
- } catch (AlreadyClosedException e) {
- // expected
- }
-
- DefaultSimilarity sim = new DefaultSimilarity();
- try {
- reader.setNorm(5, "aaa", sim.encodeNormValue(2.0f));
- fail("setNorm after close failed to throw IOException");
- } catch (AlreadyClosedException e) {
- // expected
- }
-
- try {
- reader.undeleteAll();
- fail("undeleteAll after close failed to throw IOException");
- } catch (AlreadyClosedException e) {
- // expected
- }
- dir.close();
- }
-
- // Make sure we get lock obtain failed exception with 2 writers:
- public void testLockObtainFailed() throws IOException {
- Directory dir = newDirectory();
-
- Term searchTerm = new Term("content", "aaa");
-
- // add 11 documents with term : aaa
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- writer.commit();
- for (int i = 0; i < 11; i++) {
- addDoc(writer, searchTerm.text());
- }
-
- // Create reader:
- IndexReader reader = IndexReader.open(dir, false);
-
- // Try to make changes
- try {
- reader.deleteDocument(4);
- fail("deleteDocument should have hit LockObtainFailedException");
- } catch (LockObtainFailedException e) {
- // expected
- }
-
- DefaultSimilarity sim = new DefaultSimilarity();
- try {
- reader.setNorm(5, "aaa", sim.encodeNormValue(2.0f));
- fail("setNorm should have hit LockObtainFailedException");
- } catch (LockObtainFailedException e) {
- // expected
- }
-
- try {
- reader.undeleteAll();
- fail("undeleteAll should have hit LockObtainFailedException");
- } catch (LockObtainFailedException e) {
- // expected
- }
- writer.close();
- reader.close();
- dir.close();
- }
-
- // Make sure you can set norms & commit even if a reader
- // is open against the index:
- public void testWritingNorms() throws IOException {
- Directory dir = newDirectory();
- Term searchTerm = new Term("content", "aaa");
-
- // add 1 documents with term : aaa
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- addDoc(writer, searchTerm.text());
- writer.close();
-
- // now open reader & set norm for doc 0
- IndexReader reader = IndexReader.open(dir, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- reader.setNorm(0, "content", sim.encodeNormValue(2.0f));
-
- // we should be holding the write lock now:
- assertTrue("locked", IndexWriter.isLocked(dir));
-
- reader.commit();
-
- // we should not be holding the write lock now:
- assertTrue("not locked", !IndexWriter.isLocked(dir));
-
- // open a 2nd reader:
- IndexReader reader2 = IndexReader.open(dir, false);
-
- // set norm again for doc 0
- reader.setNorm(0, "content", sim.encodeNormValue(3.0f));
- assertTrue("locked", IndexWriter.isLocked(dir));
-
- reader.close();
-
- // we should not be holding the write lock now:
- assertTrue("not locked", !IndexWriter.isLocked(dir));
-
- reader2.close();
- dir.close();
- }
-
-
- // Make sure you can set norms & commit, and there are
- // no extra norms files left:
- public void testWritingNormsNoReader() throws IOException {
- Directory dir = newDirectory();
- IndexWriter writer = null;
- IndexReader reader = null;
- Term searchTerm = new Term("content", "aaa");
-
- // add 1 documents with term : aaa
- writer = new IndexWriter(
- dir,
- newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).
- setMergePolicy(newLogMergePolicy(false))
- );
- addDoc(writer, searchTerm.text());
- writer.close();
-
- DefaultSimilarity sim = new DefaultSimilarity();
- // now open reader & set norm for doc 0 (writes to
- // _0_1.s0)
- reader = IndexReader.open(dir, false);
- reader.setNorm(0, "content", sim.encodeNormValue(2.0f));
- reader.close();
-
- // now open reader again & set norm for doc 0 (writes to _0_2.s0)
- reader = IndexReader.open(dir, false);
- reader.setNorm(0, "content", sim.encodeNormValue(2.0f));
- reader.close();
- assertFalse("failed to remove first generation norms file on writing second generation",
- dir.fileExists("_0_1.s0"));
-
- dir.close();
- }
-
/* ??? public void testOpenEmptyDirectory() throws IOException{
String dirName = "test.empty";
File fileDirName = new File(dirName);
@@ -590,7 +367,7 @@ public class TestIndexReader extends Luc
// Now open existing directory and test that reader closes all files
dir = newFSDirectory(dirFile);
- IndexReader reader1 = IndexReader.open(dir, false);
+ IndexReader reader1 = IndexReader.open(dir);
reader1.close();
dir.close();
@@ -608,7 +385,7 @@ public class TestIndexReader extends Luc
assertTrue(IndexWriter.isLocked(dir)); // writer open, so dir is locked
writer.close();
assertTrue(IndexReader.indexExists(dir));
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
assertFalse(IndexWriter.isLocked(dir)); // reader only, no lock
long version = IndexReader.lastModified(dir);
if (i == 1) {
@@ -623,7 +400,7 @@ public class TestIndexReader extends Luc
writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.CREATE));
addDocumentWithFields(writer);
writer.close();
- reader = IndexReader.open(dir, false);
+ reader = IndexReader.open(dir);
assertTrue("old lastModified is " + version + "; new lastModified is " + IndexReader.lastModified(dir), version <= IndexReader.lastModified(dir));
reader.close();
dir.close();
@@ -638,7 +415,7 @@ public class TestIndexReader extends Luc
assertTrue(IndexWriter.isLocked(dir)); // writer open, so dir is locked
writer.close();
assertTrue(IndexReader.indexExists(dir));
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
assertFalse(IndexWriter.isLocked(dir)); // reader only, no lock
long version = IndexReader.getCurrentVersion(dir);
reader.close();
@@ -647,114 +424,17 @@ public class TestIndexReader extends Luc
writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.CREATE));
addDocumentWithFields(writer);
writer.close();
- reader = IndexReader.open(dir, false);
+ reader = IndexReader.open(dir);
assertTrue("old version is " + version + "; new version is " + IndexReader.getCurrentVersion(dir), version < IndexReader.getCurrentVersion(dir));
reader.close();
dir.close();
}
- public void testLock() throws IOException {
- Directory dir = newDirectory();
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- addDocumentWithFields(writer);
- writer.close();
- writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND));
- IndexReader reader = IndexReader.open(dir, false);
- try {
- reader.deleteDocument(0);
- fail("expected lock");
- } catch(IOException e) {
- // expected exception
- }
- try {
- IndexWriter.unlock(dir); // this should not be done in the real world!
- } catch (LockReleaseFailedException lrfe) {
- writer.close();
- }
- reader.deleteDocument(0);
- reader.close();
- writer.close();
- dir.close();
- }
-
- public void testDocsOutOfOrderJIRA140() throws IOException {
- Directory dir = newDirectory();
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- for(int i=0;i<11;i++) {
- addDoc(writer, "aaa");
- }
- writer.close();
- IndexReader reader = IndexReader.open(dir, false);
-
- // Try to delete an invalid docId, yet, within range
- // of the final bits of the BitVector:
-
- boolean gotException = false;
- try {
- reader.deleteDocument(11);
- } catch (ArrayIndexOutOfBoundsException e) {
- gotException = true;
- }
- reader.close();
-
- writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(OpenMode.APPEND));
-
- // We must add more docs to get a new segment written
- for(int i=0;i<11;i++) {
- addDoc(writer, "aaa");
- }
-
- // Without the fix for LUCENE-140 this call will
- // [incorrectly] hit a "docs out of order"
- // IllegalStateException because above out-of-bounds
- // deleteDocument corrupted the index:
- writer.forceMerge(1);
- writer.close();
- if (!gotException) {
- fail("delete of out-of-bounds doc number failed to hit exception");
- }
- dir.close();
- }
-
- public void testExceptionReleaseWriteLockJIRA768() throws IOException {
-
- Directory dir = newDirectory();
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- addDoc(writer, "aaa");
- writer.close();
-
- IndexReader reader = IndexReader.open(dir, false);
- try {
- reader.deleteDocument(1);
- fail("did not hit exception when deleting an invalid doc number");
- } catch (ArrayIndexOutOfBoundsException e) {
- // expected
- }
- reader.close();
- if (IndexWriter.isLocked(dir)) {
- fail("write lock is still held after close");
- }
-
- reader = IndexReader.open(dir, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- try {
- reader.setNorm(1, "content", sim.encodeNormValue(2.0f));
- fail("did not hit exception when calling setNorm on an invalid doc number");
- } catch (ArrayIndexOutOfBoundsException e) {
- // expected
- }
- reader.close();
- if (IndexWriter.isLocked(dir)) {
- fail("write lock is still held after close");
- }
- dir.close();
- }
-
public void testOpenReaderAfterDelete() throws IOException {
File dirFile = _TestUtil.getTempDir("deletetest");
Directory dir = newFSDirectory(dirFile);
try {
- IndexReader.open(dir, false);
+ IndexReader.open(dir);
fail("expected FileNotFoundException");
} catch (FileNotFoundException e) {
// expected
@@ -764,7 +444,7 @@ public class TestIndexReader extends Luc
// Make sure we still get a CorruptIndexException (not NPE):
try {
- IndexReader.open(dir, false);
+ IndexReader.open(dir);
fail("expected FileNotFoundException");
} catch (FileNotFoundException e) {
// expected
@@ -946,7 +626,7 @@ public class TestIndexReader extends Luc
SegmentInfos sis = new SegmentInfos();
sis.read(d);
- IndexReader r = IndexReader.open(d, false);
+ IndexReader r = IndexReader.open(d);
IndexCommit c = r.getIndexCommit();
assertEquals(sis.getCurrentSegmentFileName(), c.getSegmentsFileName());
@@ -987,96 +667,6 @@ public class TestIndexReader extends Luc
d.close();
}
- public void testReadOnly() throws Throwable {
- Directory d = newDirectory();
- IndexWriter writer = new IndexWriter(d, newIndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- addDocumentWithFields(writer);
- writer.commit();
- addDocumentWithFields(writer);
- writer.close();
-
- IndexReader r = IndexReader.open(d, true);
- try {
- r.deleteDocument(0);
- fail();
- } catch (UnsupportedOperationException uoe) {
- // expected
- }
-
- writer = new IndexWriter(
- d,
- newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).
- setOpenMode(OpenMode.APPEND).
- setMergePolicy(newLogMergePolicy(10))
- );
- addDocumentWithFields(writer);
- writer.close();
-
- // Make sure reopen is still readonly:
- IndexReader r2 = IndexReader.openIfChanged(r);
- assertNotNull(r2);
- r.close();
-
- assertFalse(r == r2);
-
- try {
- r2.deleteDocument(0);
- fail();
- } catch (UnsupportedOperationException uoe) {
- // expected
- }
-
- writer = new IndexWriter(d, newIndexWriterConfig(TEST_VERSION_CURRENT,
- new MockAnalyzer(random))
- .setOpenMode(OpenMode.APPEND));
- writer.forceMerge(1);
- writer.close();
-
- // Make sure reopen to a single segment is still readonly:
- IndexReader r3 = IndexReader.openIfChanged(r2);
- assertNotNull(r3);
- assertFalse(r3 == r2);
- r2.close();
-
- assertFalse(r == r2);
-
- try {
- r3.deleteDocument(0);
- fail();
- } catch (UnsupportedOperationException uoe) {
- // expected
- }
-
- // Make sure write lock isn't held
- writer = new IndexWriter(d, newIndexWriterConfig(TEST_VERSION_CURRENT,
- new MockAnalyzer(random))
- .setOpenMode(OpenMode.APPEND));
- writer.close();
-
- r3.close();
- d.close();
- }
-
-
- // LUCENE-1474
- public void testIndexReader() throws Exception {
- Directory dir = newDirectory();
- IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- writer.addDocument(createDocument("a"));
- writer.addDocument(createDocument("b"));
- writer.addDocument(createDocument("c"));
- writer.close();
- IndexReader reader = IndexReader.open(dir, false);
- reader.deleteDocuments(new Term("id", "a"));
- reader.flush();
- reader.deleteDocuments(new Term("id", "b"));
- reader.close();
- IndexReader.open(dir,true).close();
- dir.close();
- }
-
static Document createDocument(String id) {
Document doc = new Document();
FieldType customType = new FieldType(TextField.TYPE_STORED);
@@ -1093,7 +683,7 @@ public class TestIndexReader extends Luc
public void testNoDir() throws Throwable {
Directory dir = newFSDirectory(_TestUtil.getTempDir("doesnotexist"));
try {
- IndexReader.open(dir, true);
+ IndexReader.open(dir);
fail("did not hit expected exception");
} catch (NoSuchDirectoryException nsde) {
// expected
@@ -1138,7 +728,7 @@ public class TestIndexReader extends Luc
writer.close();
// Open reader
- IndexReader r = getOnlySegmentReader(IndexReader.open(dir, false));
+ IndexReader r = getOnlySegmentReader(IndexReader.open(dir));
final int[] ints = FieldCache.DEFAULT.getInts(r, "number", false);
assertEquals(1, ints.length);
assertEquals(17, ints[0]);
@@ -1173,7 +763,7 @@ public class TestIndexReader extends Luc
writer.commit();
// Open reader1
- IndexReader r = IndexReader.open(dir, false);
+ IndexReader r = IndexReader.open(dir);
IndexReader r1 = getOnlySegmentReader(r);
final int[] ints = FieldCache.DEFAULT.getInts(r1, "number", false);
assertEquals(1, ints.length);
@@ -1207,7 +797,7 @@ public class TestIndexReader extends Luc
writer.addDocument(doc);
writer.commit();
- IndexReader r = IndexReader.open(dir, false);
+ IndexReader r = IndexReader.open(dir);
IndexReader r1 = getOnlySegmentReader(r);
assertEquals(36, r1.getUniqueTermCount());
writer.addDocument(doc);
@@ -1237,7 +827,7 @@ public class TestIndexReader extends Luc
writer.addDocument(doc);
writer.close();
- IndexReader r = IndexReader.open(dir, null, true, -1);
+ IndexReader r = IndexReader.open(dir, -1);
try {
r.docFreq(new Term("field", "f"));
fail("did not hit expected exception");
@@ -1282,7 +872,7 @@ public class TestIndexReader extends Luc
writer.commit();
Document doc = new Document();
writer.addDocument(doc);
- IndexReader r = IndexReader.open(dir, true);
+ IndexReader r = IndexReader.open(dir);
assertTrue(r.isCurrent());
writer.addDocument(doc);
writer.prepareCommit();
@@ -1365,29 +955,26 @@ public class TestIndexReader extends Luc
writer.commit();
final IndexReader reader = writer.getReader();
final int[] closeCount = new int[1];
- final IndexReader.ReaderFinishedListener listener = new IndexReader.ReaderFinishedListener() {
- public void finished(IndexReader reader) {
+ final IndexReader.ReaderClosedListener listener = new IndexReader.ReaderClosedListener() {
+ public void onClose(IndexReader reader) {
closeCount[0]++;
}
};
- reader.addReaderFinishedListener(listener);
+ reader.addReaderClosedListener(listener);
reader.close();
- // Just the top reader
+ // Close the top reader, its the only one that should be closed
assertEquals(1, closeCount[0]);
writer.close();
- // Now also the subs
- assertEquals(3, closeCount[0]);
-
IndexReader reader2 = IndexReader.open(dir);
- reader2.addReaderFinishedListener(listener);
+ reader2.addReaderClosedListener(listener);
closeCount[0] = 0;
reader2.close();
- assertEquals(3, closeCount[0]);
+ assertEquals(1, closeCount[0]);
dir.close();
}
@@ -1473,4 +1060,23 @@ public class TestIndexReader extends Luc
}
}
}
+
+ public void testLoadCertainFields() throws Exception {
+ Directory dir = newDirectory();
+ RandomIndexWriter writer = new RandomIndexWriter(random, dir);
+ Document doc = new Document();
+ doc.add(newField("field1", "foobar", StringField.TYPE_STORED));
+ doc.add(newField("field2", "foobaz", StringField.TYPE_STORED));
+ writer.addDocument(doc);
+ IndexReader r = writer.getReader();
+ writer.close();
+ Set<String> fieldsToLoad = new HashSet<String>();
+ assertEquals(0, r.document(0, fieldsToLoad).getFields().size());
+ fieldsToLoad.add("field1");
+ Document doc2 = r.document(0, fieldsToLoad);
+ assertEquals(1, doc2.getFields().size());
+ assertEquals("foobar", doc2.get("field1"));
+ r.close();
+ dir.close();
+ }
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderClone.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderClone.java?rev=1214623&r1=1214622&r2=1214623&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderClone.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderClone.java Thu Dec 15 05:11:14 2011
@@ -17,14 +17,11 @@ package org.apache.lucene.index;
* limitations under the License.
*/
-import org.apache.lucene.search.similarities.DefaultSimilarity;
import org.apache.lucene.analysis.MockAnalyzer;
import org.apache.lucene.document.Document;
import org.apache.lucene.document.TextField;
import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.LockObtainFailedException;
import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.Bits;
/**
* Tests cloning multiple types of readers, modifying the liveDocs and norms
@@ -32,470 +29,38 @@ import org.apache.lucene.util.Bits;
* implemented properly
*/
public class TestIndexReaderClone extends LuceneTestCase {
-
- public void testCloneReadOnlySegmentReader() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, false);
- IndexReader reader = IndexReader.open(dir1, false);
- IndexReader readOnlyReader = reader.clone(true);
- if (!isReadOnly(readOnlyReader)) {
- fail("reader isn't read only");
- }
- if (deleteWorked(1, readOnlyReader)) {
- fail("deleting from the original should not have worked");
- }
- reader.close();
- readOnlyReader.close();
- dir1.close();
- }
-
- // open non-readOnly reader1, clone to non-readOnly
- // reader2, make sure we can change reader2
- public void testCloneNoChangesStillReadOnly() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader r1 = IndexReader.open(dir1, false);
- IndexReader r2 = r1.clone(false);
- if (!deleteWorked(1, r2)) {
- fail("deleting from the cloned should have worked");
- }
- r1.close();
- r2.close();
- dir1.close();
- }
-
- // open non-readOnly reader1, clone to non-readOnly
- // reader2, make sure we can change reader1
- public void testCloneWriteToOrig() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader r1 = IndexReader.open(dir1, false);
- IndexReader r2 = r1.clone(false);
- if (!deleteWorked(1, r1)) {
- fail("deleting from the original should have worked");
- }
- r1.close();
- r2.close();
- dir1.close();
- }
-
- // open non-readOnly reader1, clone to non-readOnly
- // reader2, make sure we can change reader2
- public void testCloneWriteToClone() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader r1 = IndexReader.open(dir1, false);
- IndexReader r2 = r1.clone(false);
- if (!deleteWorked(1, r2)) {
- fail("deleting from the original should have worked");
- }
- // should fail because reader1 holds the write lock
- assertTrue("first reader should not be able to delete", !deleteWorked(1, r1));
- r2.close();
- // should fail because we are now stale (reader1
- // committed changes)
- assertTrue("first reader should not be able to delete", !deleteWorked(1, r1));
- r1.close();
-
- dir1.close();
+ public void testDirectoryReader() throws Exception {
+ final Directory dir = createIndex(0);
+ performDefaultTests(IndexReader.open(dir));
+ dir.close();
}
- // create single-segment index, open non-readOnly
- // SegmentReader, add docs, reopen to multireader, then do
- // delete
- public void testReopenSegmentReaderToMultiReader() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, false);
- IndexReader reader1 = IndexReader.open(dir1, false);
-
- TestIndexReaderReopen.modifyIndex(5, dir1);
-
- IndexReader reader2 = IndexReader.openIfChanged(reader1);
- assertNotNull(reader2);
- assertTrue(reader1 != reader2);
-
- assertTrue(deleteWorked(1, reader2));
- reader1.close();
- reader2.close();
- dir1.close();
- }
-
- // open non-readOnly reader1, clone to readOnly reader2
- public void testCloneWriteableToReadOnly() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader reader = IndexReader.open(dir1, false);
- IndexReader readOnlyReader = reader.clone(true);
- if (!isReadOnly(readOnlyReader)) {
- fail("reader isn't read only");
- }
- if (deleteWorked(1, readOnlyReader)) {
- fail("deleting from the original should not have worked");
- }
- // this readonly reader shouldn't have a write lock
- if (readOnlyReader.hasChanges) {
- fail("readOnlyReader has a write lock");
- }
- reader.close();
- readOnlyReader.close();
- dir1.close();
- }
-
- // open non-readOnly reader1, reopen to readOnly reader2
- public void testReopenWriteableToReadOnly() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader reader = IndexReader.open(dir1, false);
- final int docCount = reader.numDocs();
- assertTrue(deleteWorked(1, reader));
- assertEquals(docCount-1, reader.numDocs());
-
- IndexReader readOnlyReader = IndexReader.openIfChanged(reader, true);
- assertNotNull(readOnlyReader);
- if (!isReadOnly(readOnlyReader)) {
- fail("reader isn't read only");
- }
- assertFalse(deleteWorked(1, readOnlyReader));
- assertEquals(docCount-1, readOnlyReader.numDocs());
- reader.close();
- readOnlyReader.close();
- dir1.close();
- }
-
- // open readOnly reader1, clone to non-readOnly reader2
- public void testCloneReadOnlyToWriteable() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader reader1 = IndexReader.open(dir1, true);
-
- IndexReader reader2 = reader1.clone(false);
- if (isReadOnly(reader2)) {
- fail("reader should not be read only");
- }
- assertFalse("deleting from the original reader should not have worked", deleteWorked(1, reader1));
- // this readonly reader shouldn't yet have a write lock
- if (reader2.hasChanges) {
- fail("cloned reader should not have write lock");
- }
- assertTrue("deleting from the cloned reader should have worked", deleteWorked(1, reader2));
- reader1.close();
- reader2.close();
- dir1.close();
- }
-
- // open non-readOnly reader1 on multi-segment index, then
- // fully merge the index, then clone to readOnly reader2
- public void testReadOnlyCloneAfterFullMerge() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader reader1 = IndexReader.open(dir1, false);
- IndexWriter w = new IndexWriter(dir1, newIndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- w.forceMerge(1);
- w.close();
- IndexReader reader2 = reader1.clone(true);
- assertTrue(isReadOnly(reader2));
- reader1.close();
- reader2.close();
+ public void testMultiReader() throws Exception {
+ final Directory dir1 = createIndex(0);
+ final IndexReader r1 = IndexReader.open(dir1);
+ final Directory dir2 = createIndex(0);
+ final IndexReader r2 = IndexReader.open(dir2);
+ final MultiReader mr = new MultiReader(r1, r2);
+ performDefaultTests(mr);
dir1.close();
+ dir2.close();
}
- private static boolean deleteWorked(int doc, IndexReader r) {
- boolean exception = false;
- try {
- // trying to delete from the original reader should throw an exception
- r.deleteDocument(doc);
- } catch (Exception ex) {
- exception = true;
- }
- return !exception;
- }
-
- public void testCloneReadOnlyDirectoryReader() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader reader = IndexReader.open(dir1, false);
- IndexReader readOnlyReader = reader.clone(true);
- if (!isReadOnly(readOnlyReader)) {
- fail("reader isn't read only");
- }
- reader.close();
- readOnlyReader.close();
- dir1.close();
- }
-
- public static boolean isReadOnly(IndexReader r) {
- if (r instanceof SegmentReader) {
- return ((SegmentReader) r).readOnly;
- } else if (r instanceof DirectoryReader) {
- return ((DirectoryReader) r).readOnly;
- } else {
- return false;
- }
- }
-
public void testParallelReader() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, true);
- final Directory dir2 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir2, true);
- IndexReader r1 = IndexReader.open(dir1, false);
- IndexReader r2 = IndexReader.open(dir2, false);
-
- ParallelReader pr1 = new ParallelReader();
- pr1.add(r1);
- pr1.add(r2);
-
- performDefaultTests(pr1);
- pr1.close();
+ final Directory dir1 = createIndex(0);
+ final IndexReader r1 = IndexReader.open(dir1);
+ final Directory dir2 = createIndex(1);
+ final IndexReader r2 = IndexReader.open(dir2);
+ final ParallelReader pr = new ParallelReader();
+ pr.add(r1);
+ pr.add(r2);
+ performDefaultTests(pr);
dir1.close();
dir2.close();
}
-
- /**
- * 1. Get a norm from the original reader 2. Clone the original reader 3.
- * Delete a document and set the norm of the cloned reader 4. Verify the norms
- * are not the same on each reader 5. Verify the doc deleted is only in the
- * cloned reader 6. Try to delete a document in the original reader, an
- * exception should be thrown
- *
- * @param r1 IndexReader to perform tests on
- * @throws Exception
- */
- private void performDefaultTests(IndexReader r1) throws Exception {
- DefaultSimilarity sim = new DefaultSimilarity();
- float norm1 = sim.decodeNormValue(MultiNorms.norms(r1, "field1")[4]);
-
- IndexReader pr1Clone = (IndexReader) r1.clone();
- pr1Clone.deleteDocument(10);
- pr1Clone.setNorm(4, "field1", sim.encodeNormValue(0.5f));
- assertTrue(sim.decodeNormValue(MultiNorms.norms(r1, "field1")[4]) == norm1);
- assertTrue(sim.decodeNormValue(MultiNorms.norms(pr1Clone, "field1")[4]) != norm1);
-
- final Bits liveDocs = MultiFields.getLiveDocs(r1);
- assertTrue(liveDocs == null || liveDocs.get(10));
- assertFalse(MultiFields.getLiveDocs(pr1Clone).get(10));
-
- // try to update the original reader, which should throw an exception
- try {
- r1.deleteDocument(11);
- fail("Tried to delete doc 11 and an exception should have been thrown");
- } catch (Exception exception) {
- // expectted
- }
- pr1Clone.close();
- }
-
- public void testMixedReaders() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, true);
- final Directory dir2 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir2, true);
- IndexReader r1 = IndexReader.open(dir1, false);
- IndexReader r2 = IndexReader.open(dir2, false);
-
- MultiReader multiReader = new MultiReader(r1, r2);
- performDefaultTests(multiReader);
- multiReader.close();
- dir1.close();
- dir2.close();
- }
-
- public void testSegmentReaderUndeleteall() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, false);
- SegmentReader origSegmentReader = getOnlySegmentReader(IndexReader.open(dir1, false));
- origSegmentReader.deleteDocument(10);
- assertDelDocsRefCountEquals(1, origSegmentReader);
- origSegmentReader.undeleteAll();
- assertNull(origSegmentReader.liveDocsRef);
- origSegmentReader.close();
- // need to test norms?
- dir1.close();
- }
-
- public void testSegmentReaderCloseReferencing() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, false);
- SegmentReader origSegmentReader = getOnlySegmentReader(IndexReader.open(dir1, false));
- origSegmentReader.deleteDocument(1);
- DefaultSimilarity sim = new DefaultSimilarity();
- origSegmentReader.setNorm(4, "field1", sim.encodeNormValue(0.5f));
-
- SegmentReader clonedSegmentReader = (SegmentReader) origSegmentReader
- .clone();
- assertDelDocsRefCountEquals(2, origSegmentReader);
- origSegmentReader.close();
- assertDelDocsRefCountEquals(1, origSegmentReader);
- // check the norm refs
- SegmentNorms norm = clonedSegmentReader.norms.get("field1");
- assertEquals(1, norm.bytesRef().get());
- clonedSegmentReader.close();
- dir1.close();
- }
- public void testSegmentReaderDelDocsReferenceCounting() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, false);
-
- IndexReader origReader = IndexReader.open(dir1, false);
- SegmentReader origSegmentReader = getOnlySegmentReader(origReader);
- // liveDocsRef should be null because nothing has updated yet
- assertNull(origSegmentReader.liveDocsRef);
-
- // we deleted a document, so there is now a liveDocs bitvector and a
- // reference to it
- origReader.deleteDocument(1);
- assertDelDocsRefCountEquals(1, origSegmentReader);
-
- // the cloned segmentreader should have 2 references, 1 to itself, and 1 to
- // the original segmentreader
- IndexReader clonedReader = (IndexReader) origReader.clone();
- SegmentReader clonedSegmentReader = getOnlySegmentReader(clonedReader);
- assertDelDocsRefCountEquals(2, origSegmentReader);
- // deleting a document creates a new liveDocs bitvector, the refs goes to
- // 1
- clonedReader.deleteDocument(2);
- assertDelDocsRefCountEquals(1, origSegmentReader);
- assertDelDocsRefCountEquals(1, clonedSegmentReader);
-
- // make sure the deletedocs objects are different (copy
- // on write)
- assertTrue(origSegmentReader.liveDocs != clonedSegmentReader.liveDocs);
-
- assertDocDeleted(origSegmentReader, clonedSegmentReader, 1);
- final Bits liveDocs = origSegmentReader.getLiveDocs();
- assertTrue(liveDocs == null || liveDocs.get(2)); // doc 2 should not be deleted
- // in original segmentreader
- assertFalse(clonedSegmentReader.getLiveDocs().get(2)); // doc 2 should be deleted in
- // cloned segmentreader
-
- // deleting a doc from the original segmentreader should throw an exception
- try {
- origReader.deleteDocument(4);
- fail("expected exception");
- } catch (LockObtainFailedException lbfe) {
- // expected
- }
-
- origReader.close();
- // try closing the original segment reader to see if it affects the
- // clonedSegmentReader
- clonedReader.deleteDocument(3);
- clonedReader.flush();
- assertDelDocsRefCountEquals(1, clonedSegmentReader);
-
- // test a reopened reader
- IndexReader reopenedReader = IndexReader.openIfChanged(clonedReader);
- if (reopenedReader == null) {
- reopenedReader = clonedReader;
- }
- IndexReader cloneReader2 = (IndexReader) reopenedReader.clone();
- SegmentReader cloneSegmentReader2 = getOnlySegmentReader(cloneReader2);
- assertDelDocsRefCountEquals(2, cloneSegmentReader2);
- clonedReader.close();
- reopenedReader.close();
- cloneReader2.close();
-
- dir1.close();
- }
-
- // LUCENE-1648
- public void testCloneWithDeletes() throws Throwable {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, false);
- IndexReader origReader = IndexReader.open(dir1, false);
- origReader.deleteDocument(1);
-
- IndexReader clonedReader = (IndexReader) origReader.clone();
- origReader.close();
- clonedReader.close();
-
- IndexReader r = IndexReader.open(dir1, false);
- assertFalse(MultiFields.getLiveDocs(r).get(1));
- r.close();
- dir1.close();
- }
-
- // LUCENE-1648
- public void testCloneWithSetNorm() throws Throwable {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, false);
- IndexReader orig = IndexReader.open(dir1, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- orig.setNorm(1, "field1", sim.encodeNormValue(17.0f));
- final byte encoded = sim.encodeNormValue(17.0f);
- assertEquals(encoded, MultiNorms.norms(orig, "field1")[1]);
-
- // the cloned segmentreader should have 2 references, 1 to itself, and 1 to
- // the original segmentreader
- IndexReader clonedReader = (IndexReader) orig.clone();
- orig.close();
- clonedReader.close();
-
- IndexReader r = IndexReader.open(dir1, false);
- assertEquals(encoded, MultiNorms.norms(r, "field1")[1]);
- r.close();
- dir1.close();
- }
-
- private void assertDocDeleted(SegmentReader reader, SegmentReader reader2,
- int doc) {
- assertEquals(reader.getLiveDocs().get(doc), reader2.getLiveDocs().get(doc));
- }
-
- private void assertDelDocsRefCountEquals(int refCount, SegmentReader reader) {
- assertEquals(refCount, reader.liveDocsRef.get());
- }
-
- public void testCloneSubreaders() throws Exception {
- final Directory dir1 = newDirectory();
-
- TestIndexReaderReopen.createIndex(random, dir1, true);
- IndexReader reader = IndexReader.open(dir1, false);
- reader.deleteDocument(1); // acquire write lock
- IndexReader[] subs = reader.getSequentialSubReaders();
- assert subs.length > 1;
-
- IndexReader[] clones = new IndexReader[subs.length];
- for (int x=0; x < subs.length; x++) {
- clones[x] = (IndexReader) subs[x].clone();
- }
- reader.close();
- for (int x=0; x < subs.length; x++) {
- clones[x].close();
- }
- dir1.close();
- }
-
- public void testLucene1516Bug() throws Exception {
- final Directory dir1 = newDirectory();
- TestIndexReaderReopen.createIndex(random, dir1, false);
- IndexReader r1 = IndexReader.open(dir1, false);
- r1.incRef();
- IndexReader r2 = r1.clone(false);
- r1.deleteDocument(5);
- r1.decRef();
-
- r1.incRef();
-
- r2.close();
- r1.decRef();
- r1.close();
- dir1.close();
- }
-
- public void testCloseStoredFields() throws Exception {
+ private Directory createIndex(int no) throws Exception {
final Directory dir = newDirectory();
IndexWriter w = new IndexWriter(
dir,
@@ -503,13 +68,19 @@ public class TestIndexReaderClone extend
setMergePolicy(newLogMergePolicy(false))
);
Document doc = new Document();
- doc.add(newField("field", "yes it's stored", TextField.TYPE_STORED));
+ doc.add(newField("field"+no, "yes it's stored", TextField.TYPE_STORED));
w.addDocument(doc);
w.close();
- IndexReader r1 = IndexReader.open(dir, false);
- IndexReader r2 = r1.clone(false);
+ return dir;
+ }
+
+ private void performDefaultTests(IndexReader r1) throws Exception {
+ IndexReader r2 = (IndexReader) r1.clone();
+ assertTrue(r1 != r2);
+ TestIndexReader.assertIndexEquals(r1, r2);
r1.close();
r2.close();
- dir.close();
+ TestIndexReaderReopen.assertReaderClosed(r1, true, true);
+ TestIndexReaderReopen.assertReaderClosed(r2, true, true);
}
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java?rev=1214623&r1=1214622&r2=1214623&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java Thu Dec 15 05:11:14 2011
@@ -62,7 +62,7 @@ public class TestIndexReaderReopen exten
@Override
protected IndexReader openReader() throws IOException {
- return IndexReader.open(dir1, false);
+ return IndexReader.open(dir1);
}
});
@@ -80,7 +80,7 @@ public class TestIndexReaderReopen exten
@Override
protected IndexReader openReader() throws IOException {
- return IndexReader.open(dir2, false);
+ return IndexReader.open(dir2);
}
});
@@ -104,8 +104,8 @@ public class TestIndexReaderReopen exten
@Override
protected IndexReader openReader() throws IOException {
ParallelReader pr = new ParallelReader();
- pr.add(IndexReader.open(dir1, false));
- pr.add(IndexReader.open(dir2, false));
+ pr.add(IndexReader.open(dir1));
+ pr.add(IndexReader.open(dir2));
return pr;
}
@@ -129,11 +129,11 @@ public class TestIndexReaderReopen exten
@Override
protected IndexReader openReader() throws IOException {
ParallelReader pr = new ParallelReader();
- pr.add(IndexReader.open(dir3, false));
- pr.add(IndexReader.open(dir4, false));
+ pr.add(IndexReader.open(dir3));
+ pr.add(IndexReader.open(dir4));
// Does not implement reopen, so
// hits exception:
- pr.add(new FilterIndexReader(IndexReader.open(dir3, false)));
+ pr.add(new FilterIndexReader(IndexReader.open(dir3)));
return pr;
}
@@ -163,7 +163,7 @@ public class TestIndexReaderReopen exten
TEST_VERSION_CURRENT, new MockAnalyzer(random)).setOpenMode(
OpenMode.CREATE).setMergeScheduler(new SerialMergeScheduler()).setMergePolicy(newLogMergePolicy()));
iwriter.commit();
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
try {
int M = 3;
FieldType customType = new FieldType(TextField.TYPE_STORED);
@@ -200,7 +200,7 @@ public class TestIndexReaderReopen exten
} else {
// recreate
reader.close();
- reader = IndexReader.open(dir, false);
+ reader = IndexReader.open(dir);
}
}
} finally {
@@ -226,8 +226,8 @@ public class TestIndexReaderReopen exten
@Override
protected IndexReader openReader() throws IOException {
- return new MultiReader(IndexReader.open(dir1, false),
- IndexReader.open(dir2, false));
+ return new MultiReader(IndexReader.open(dir1),
+ IndexReader.open(dir2));
}
});
@@ -251,11 +251,11 @@ public class TestIndexReaderReopen exten
@Override
protected IndexReader openReader() throws IOException {
- return new MultiReader(IndexReader.open(dir3, false),
- IndexReader.open(dir4, false),
+ return new MultiReader(IndexReader.open(dir3),
+ IndexReader.open(dir4),
// Does not implement reopen, so
// hits exception:
- new FilterIndexReader(IndexReader.open(dir3, false)));
+ new FilterIndexReader(IndexReader.open(dir3)));
}
});
@@ -279,20 +279,15 @@ public class TestIndexReaderReopen exten
@Override
protected void modifyIndex(int i) throws IOException {
- // only change norms in this index to maintain the same number of docs for each of ParallelReader's subreaders
- if (i == 1) TestIndexReaderReopen.modifyIndex(i, dir1);
-
TestIndexReaderReopen.modifyIndex(i, dir4);
TestIndexReaderReopen.modifyIndex(i, dir5);
}
@Override
protected IndexReader openReader() throws IOException {
- ParallelReader pr = new ParallelReader();
- pr.add(IndexReader.open(dir1, false));
- pr.add(IndexReader.open(dir2, false));
- MultiReader mr = new MultiReader(IndexReader.open(dir3, false), IndexReader.open(dir4, false));
- return new MultiReader(pr, mr, IndexReader.open(dir5, false));
+ MultiReader mr1 = new MultiReader(IndexReader.open(dir1), IndexReader.open(dir2));
+ MultiReader mr2 = new MultiReader(IndexReader.open(dir3), IndexReader.open(dir4));
+ return new MultiReader(mr1, mr2, IndexReader.open(dir5));
}
});
dir1.close();
@@ -347,111 +342,6 @@ public class TestIndexReaderReopen exten
assertReaderClosed(index1, true, true);
assertReaderClosed(index2, true, true);
}
-
- public void testReferenceCounting() throws IOException {
- for (int mode = 0; mode < 4; mode++) {
- Directory dir1 = newDirectory();
- createIndex(random, dir1, true);
-
- IndexReader reader0 = IndexReader.open(dir1, false);
- assertRefCountEquals(1, reader0);
-
- assertTrue(reader0 instanceof DirectoryReader);
- IndexReader[] subReaders0 = reader0.getSequentialSubReaders();
- for (int i = 0; i < subReaders0.length; i++) {
- assertRefCountEquals(1, subReaders0[i]);
- }
-
- // delete first document, so that only one of the subReaders have to be re-opened
- IndexReader modifier = IndexReader.open(dir1, false);
- modifier.deleteDocument(0);
- modifier.close();
-
- IndexReader reader1 = refreshReader(reader0, true).refreshedReader;
- assertTrue(reader1 instanceof DirectoryReader);
- IndexReader[] subReaders1 = reader1.getSequentialSubReaders();
- assertEquals(subReaders0.length, subReaders1.length);
-
- for (int i = 0; i < subReaders0.length; i++) {
- if (subReaders0[i] != subReaders1[i]) {
- assertRefCountEquals(1, subReaders0[i]);
- assertRefCountEquals(1, subReaders1[i]);
- } else {
- assertRefCountEquals(2, subReaders0[i]);
- }
- }
-
- // delete first document, so that only one of the subReaders have to be re-opened
- modifier = IndexReader.open(dir1, false);
- modifier.deleteDocument(1);
- modifier.close();
-
- IndexReader reader2 = refreshReader(reader1, true).refreshedReader;
- assertTrue(reader2 instanceof DirectoryReader);
- IndexReader[] subReaders2 = reader2.getSequentialSubReaders();
- assertEquals(subReaders1.length, subReaders2.length);
-
- for (int i = 0; i < subReaders2.length; i++) {
- if (subReaders2[i] == subReaders1[i]) {
- if (subReaders1[i] == subReaders0[i]) {
- assertRefCountEquals(3, subReaders2[i]);
- } else {
- assertRefCountEquals(2, subReaders2[i]);
- }
- } else {
- assertRefCountEquals(1, subReaders2[i]);
- if (subReaders0[i] == subReaders1[i]) {
- assertRefCountEquals(2, subReaders2[i]);
- assertRefCountEquals(2, subReaders0[i]);
- } else {
- assertRefCountEquals(1, subReaders0[i]);
- assertRefCountEquals(1, subReaders1[i]);
- }
- }
- }
-
- IndexReader reader3 = refreshReader(reader0, true).refreshedReader;
- assertTrue(reader3 instanceof DirectoryReader);
- IndexReader[] subReaders3 = reader3.getSequentialSubReaders();
- assertEquals(subReaders3.length, subReaders0.length);
-
- // try some permutations
- switch (mode) {
- case 0:
- reader0.close();
- reader1.close();
- reader2.close();
- reader3.close();
- break;
- case 1:
- reader3.close();
- reader2.close();
- reader1.close();
- reader0.close();
- break;
- case 2:
- reader2.close();
- reader3.close();
- reader0.close();
- reader1.close();
- break;
- case 3:
- reader1.close();
- reader3.close();
- reader2.close();
- reader0.close();
- break;
- }
-
- assertReaderClosed(reader0, true, true);
- assertReaderClosed(reader1, true, true);
- assertReaderClosed(reader2, true, true);
- assertReaderClosed(reader3, true, true);
-
- dir1.close();
- }
- }
-
public void testReferenceCountingMultiReader() throws IOException {
for (int mode = 0; mode <=1; mode++) {
@@ -460,10 +350,10 @@ public class TestIndexReaderReopen exten
Directory dir2 = newDirectory();
createIndex(random, dir2, true);
- IndexReader reader1 = IndexReader.open(dir1, false);
+ IndexReader reader1 = IndexReader.open(dir1);
assertRefCountEquals(1, reader1);
- IndexReader initReader2 = IndexReader.open(dir2, false);
+ IndexReader initReader2 = IndexReader.open(dir2);
IndexReader multiReader1 = new MultiReader(new IndexReader[] {reader1, initReader2}, (mode == 0));
modifyIndex(0, dir2);
assertRefCountEquals(1 + mode, reader1);
@@ -527,160 +417,6 @@ public class TestIndexReaderReopen exten
}
}
-
- public void testReferenceCountingParallelReader() throws IOException {
- for (int mode = 0; mode <=1; mode++) {
- Directory dir1 = newDirectory();
- createIndex(random, dir1, false);
- Directory dir2 = newDirectory();
- createIndex(random, dir2, true);
-
- IndexReader reader1 = IndexReader.open(dir1, false);
- assertRefCountEquals(1, reader1);
-
- ParallelReader parallelReader1 = new ParallelReader(mode == 0);
- parallelReader1.add(reader1);
- IndexReader initReader2 = IndexReader.open(dir2, false);
- parallelReader1.add(initReader2);
- modifyIndex(1, dir2);
- assertRefCountEquals(1 + mode, reader1);
-
- IndexReader parallelReader2 = IndexReader.openIfChanged(parallelReader1);
- assertNotNull(parallelReader2);
- assertNull(IndexReader.openIfChanged(parallelReader2));
- // index1 hasn't changed, so parallelReader2 should share reader1 now with multiReader1
- assertRefCountEquals(2 + mode, reader1);
-
- modifyIndex(0, dir1);
- modifyIndex(0, dir2);
- IndexReader reader2 = IndexReader.openIfChanged(reader1);
- assertNotNull(reader2);
- assertRefCountEquals(2 + mode, reader1);
-
- if (mode == 1) {
- initReader2.close();
- }
-
- modifyIndex(4, dir1);
- IndexReader reader3 = IndexReader.openIfChanged(reader2);
- assertNotNull(reader3);
- assertRefCountEquals(2 + mode, reader1);
- assertRefCountEquals(1, reader2);
-
- parallelReader1.close();
- assertRefCountEquals(1 + mode, reader1);
-
- parallelReader1.close();
- assertRefCountEquals(1 + mode, reader1);
-
- if (mode == 1) {
- initReader2.close();
- }
-
- reader1.close();
- assertRefCountEquals(1, reader1);
-
- parallelReader2.close();
- assertRefCountEquals(0, reader1);
-
- parallelReader2.close();
- assertRefCountEquals(0, reader1);
-
- reader3.close();
- assertRefCountEquals(0, reader1);
- assertReaderClosed(reader1, true, false);
-
- reader2.close();
- assertRefCountEquals(0, reader1);
- assertReaderClosed(reader1, true, false);
-
- reader2.close();
- assertRefCountEquals(0, reader1);
-
- reader3.close();
- assertRefCountEquals(0, reader1);
- assertReaderClosed(reader1, true, true);
-
- dir1.close();
- dir2.close();
- }
-
- }
-
- public void testNormsRefCounting() throws IOException {
- Directory dir1 = newDirectory();
- createIndex(random, dir1, false);
-
- IndexReader reader1 = IndexReader.open(dir1, false);
- SegmentReader segmentReader1 = getOnlySegmentReader(reader1);
- IndexReader modifier = IndexReader.open(dir1, false);
- modifier.deleteDocument(0);
- modifier.close();
-
- IndexReader reader2 = IndexReader.openIfChanged(reader1);
- assertNotNull(reader2);
- modifier = IndexReader.open(dir1, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- modifier.setNorm(1, "field1", sim.encodeNormValue(50f));
- modifier.setNorm(1, "field2", sim.encodeNormValue(50f));
- modifier.close();
-
- IndexReader reader3 = IndexReader.openIfChanged(reader2);
- assertNotNull(reader3);
- SegmentReader segmentReader3 = getOnlySegmentReader(reader3);
- modifier = IndexReader.open(dir1, false);
- modifier.deleteDocument(2);
- modifier.close();
-
- IndexReader reader4 = IndexReader.openIfChanged(reader3);
- assertNotNull(reader4);
- modifier = IndexReader.open(dir1, false);
- modifier.deleteDocument(3);
- modifier.close();
-
- IndexReader reader5 = IndexReader.openIfChanged(reader3);
- assertNotNull(reader5);
-
- // Now reader2-reader5 references reader1. reader1 and reader2
- // share the same norms. reader3, reader4, reader5 also share norms.
- assertRefCountEquals(1, reader1);
- assertFalse(segmentReader1.normsClosed());
-
- reader1.close();
-
- assertRefCountEquals(0, reader1);
- assertFalse(segmentReader1.normsClosed());
-
- reader2.close();
- assertRefCountEquals(0, reader1);
-
- // now the norms for field1 and field2 should be closed
- assertTrue(segmentReader1.normsClosed("field1"));
- assertTrue(segmentReader1.normsClosed("field2"));
-
- // but the norms for field3 and field4 should still be open
- assertFalse(segmentReader1.normsClosed("field3"));
- assertFalse(segmentReader1.normsClosed("field4"));
-
- reader3.close();
- assertRefCountEquals(0, reader1);
- assertFalse(segmentReader3.normsClosed());
- reader5.close();
- assertRefCountEquals(0, reader1);
- assertFalse(segmentReader3.normsClosed());
- reader4.close();
- assertRefCountEquals(0, reader1);
-
- // and now all norms that reader1 used should be closed
- assertTrue(segmentReader1.normsClosed());
-
- // now that reader3, reader4 and reader5 are closed,
- // the norms that those three readers shared should be
- // closed as well
- assertTrue(segmentReader3.normsClosed());
-
- dir1.close();
- }
private void performTestsWithExceptionInReopen(TestReopen test) throws Exception {
IndexReader index1 = test.openReader();
@@ -717,31 +453,20 @@ public class TestIndexReaderReopen exten
final TestReopen test = new TestReopen() {
@Override
protected void modifyIndex(int i) throws IOException {
- if (i % 3 == 0) {
- IndexReader modifier = IndexReader.open(dir, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- modifier.setNorm(i, "field1", sim.encodeNormValue(50f));
- modifier.close();
- } else if (i % 3 == 1) {
- IndexReader modifier = IndexReader.open(dir, false);
- modifier.deleteDocument(i % modifier.maxDoc());
- modifier.close();
- } else {
- IndexWriter modifier = new IndexWriter(dir, new IndexWriterConfig(
- TEST_VERSION_CURRENT, new MockAnalyzer(random)));
- modifier.addDocument(createDocument(n + i, 6));
- modifier.close();
- }
+ IndexWriter modifier = new IndexWriter(dir, new IndexWriterConfig(
+ TEST_VERSION_CURRENT, new MockAnalyzer(random)));
+ modifier.addDocument(createDocument(n + i, 6));
+ modifier.close();
}
@Override
protected IndexReader openReader() throws IOException {
- return IndexReader.open(dir, false);
+ return IndexReader.open(dir);
}
};
final List<ReaderCouple> readers = Collections.synchronizedList(new ArrayList<ReaderCouple>());
- IndexReader firstReader = IndexReader.open(dir, false);
+ IndexReader firstReader = IndexReader.open(dir);
IndexReader reader = firstReader;
final Random rnd = random;
@@ -790,7 +515,6 @@ public class TestIndexReaderReopen exten
if (hits.length > 0) {
searcher.doc(hits[0].doc);
}
- searcher.close();
if (refreshed != r) {
refreshed.close();
}
@@ -966,7 +690,7 @@ public class TestIndexReaderReopen exten
w.close();
- IndexReader r = IndexReader.open(dir, false);
+ IndexReader r = IndexReader.open(dir);
if (multiSegment) {
assertTrue(r.getSequentialSubReaders().length > 1);
} else {
@@ -1009,21 +733,12 @@ public class TestIndexReaderReopen exten
break;
}
case 1: {
- IndexReader reader = IndexReader.open(dir, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- reader.setNorm(4, "field1", sim.encodeNormValue(123f));
- reader.setNorm(44, "field2", sim.encodeNormValue(222f));
- reader.setNorm(44, "field4", sim.encodeNormValue(22f));
- reader.close();
- break;
- }
- case 2: {
IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
w.forceMerge(1);
w.close();
break;
}
- case 3: {
+ case 2: {
IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
w.addDocument(createDocument(101, 4));
w.forceMerge(1);
@@ -1032,15 +747,7 @@ public class TestIndexReaderReopen exten
w.close();
break;
}
- case 4: {
- IndexReader reader = IndexReader.open(dir, false);
- DefaultSimilarity sim = new DefaultSimilarity();
- reader.setNorm(5, "field1", sim.encodeNormValue(123f));
- reader.setNorm(55, "field2", sim.encodeNormValue(222f));
- reader.close();
- break;
- }
- case 5: {
+ case 3: {
IndexWriter w = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)));
w.addDocument(createDocument(101, 4));
w.close();
@@ -1049,11 +756,12 @@ public class TestIndexReaderReopen exten
}
}
- private void assertReaderClosed(IndexReader reader, boolean checkSubReaders, boolean checkNormsClosed) {
+ static void assertReaderClosed(IndexReader reader, boolean checkSubReaders, boolean checkNormsClosed) {
assertEquals(0, reader.getRefCount());
if (checkNormsClosed && reader instanceof SegmentReader) {
- assertTrue(((SegmentReader) reader).normsClosed());
+ // TODO: should we really assert something here? we check for open files and this is obselete...
+ // assertTrue(((SegmentReader) reader).normsClosed());
}
if (checkSubReaders) {
@@ -1103,94 +811,6 @@ public class TestIndexReaderReopen exten
protected abstract void modifyIndex(int i) throws IOException;
}
- public void testCloseOrig() throws Throwable {
- Directory dir = newDirectory();
- createIndex(random, dir, false);
- IndexReader r1 = IndexReader.open(dir, false);
- IndexReader r2 = IndexReader.open(dir, false);
- r2.deleteDocument(0);
- r2.close();
-
- IndexReader r3 = IndexReader.openIfChanged(r1);
- assertNotNull(r3);
- assertTrue(r1 != r3);
- r1.close();
- try {
- r1.document(2);
- fail("did not hit exception");
- } catch (AlreadyClosedException ace) {
- // expected
- }
- r3.close();
- dir.close();
- }
-
- public void testDeletes() throws Throwable {
- Directory dir = newDirectory();
- createIndex(random, dir, false); // Create an index with a bunch of docs (1 segment)
-
- modifyIndex(0, dir); // Get delete bitVector on 1st segment
- modifyIndex(5, dir); // Add a doc (2 segments)
-
- IndexReader r1 = IndexReader.open(dir, false); // MSR
-
- modifyIndex(5, dir); // Add another doc (3 segments)
-
- IndexReader r2 = IndexReader.openIfChanged(r1); // MSR
- assertNotNull(r2);
- assertNull(IndexReader.openIfChanged(r2));
- assertTrue(r1 != r2);
-
- SegmentReader sr1 = (SegmentReader) r1.getSequentialSubReaders()[0]; // Get SRs for the first segment from original
- SegmentReader sr2 = (SegmentReader) r2.getSequentialSubReaders()[0]; // and reopened IRs
-
- // At this point they share the same BitVector
- assertTrue(sr1.liveDocs==sr2.liveDocs);
-
- r2.deleteDocument(0);
-
- // r1 should not see the delete
- final Bits r1LiveDocs = MultiFields.getLiveDocs(r1);
- assertFalse(r1LiveDocs != null && !r1LiveDocs.get(0));
-
- // Now r2 should have made a private copy of deleted docs:
- assertTrue(sr1.liveDocs!=sr2.liveDocs);
-
- r1.close();
- r2.close();
- dir.close();
- }
-
- public void testDeletes2() throws Throwable {
- Directory dir = newDirectory();
- createIndex(random, dir, false);
- // Get delete bitVector
- modifyIndex(0, dir);
- IndexReader r1 = IndexReader.open(dir, false);
-
- // Add doc:
- modifyIndex(5, dir);
-
- IndexReader r2 = IndexReader.openIfChanged(r1);
- assertNotNull(r2);
- assertTrue(r1 != r2);
-
- IndexReader[] rs2 = r2.getSequentialSubReaders();
-
- SegmentReader sr1 = getOnlySegmentReader(r1);
- SegmentReader sr2 = (SegmentReader) rs2[0];
-
- // At this point they share the same BitVector
- assertTrue(sr1.liveDocs==sr2.liveDocs);
- final BitVector liveDocs = sr1.liveDocs;
- r1.close();
-
- r2.deleteDocument(0);
- assertTrue(liveDocs==sr2.liveDocs);
- r2.close();
- dir.close();
- }
-
private static class KeepAllCommits implements IndexDeletionPolicy {
public void onInit(List<? extends IndexCommit> commits) {
}
@@ -1223,7 +843,7 @@ public class TestIndexReaderReopen exten
}
writer.close();
- IndexReader r = IndexReader.open(dir, false);
+ IndexReader r = IndexReader.open(dir);
assertEquals(0, r.numDocs());
Collection<IndexCommit> commits = IndexReader.listCommits(dir);
@@ -1232,14 +852,6 @@ public class TestIndexReaderReopen exten
assertNotNull(r2);
assertTrue(r2 != r);
- // Reader should be readOnly
- try {
- r2.deleteDocument(0);
- fail("no exception hit");
- } catch (UnsupportedOperationException uoe) {
- // expected
- }
-
final Map<String,String> s = commit.getUserData();
final int v;
if (s.size() == 0) {
@@ -1259,54 +871,4 @@ public class TestIndexReaderReopen exten
r.close();
dir.close();
}
-
- // LUCENE-1579: Make sure all SegmentReaders are new when
- // reopen switches readOnly
- public void testReopenChangeReadonly() throws Exception {
- Directory dir = newDirectory();
- IndexWriter writer = new IndexWriter(
- dir,
- newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).
- setMaxBufferedDocs(-1).
- setMergePolicy(newLogMergePolicy(10))
- );
- Document doc = new Document();
- doc.add(newField("number", "17", StringField.TYPE_UNSTORED));
- writer.addDocument(doc);
- writer.commit();
-
- // Open reader1
- IndexReader r = IndexReader.open(dir, false);
- assertTrue(r instanceof DirectoryReader);
- IndexReader r1 = getOnlySegmentReader(r);
- final int[] ints = FieldCache.DEFAULT.getInts(r1, "number", false);
- assertEquals(1, ints.length);
- assertEquals(17, ints[0]);
-
- // Reopen to readonly w/ no chnages
- IndexReader r3 = IndexReader.openIfChanged(r, true);
- assertNotNull(r3);
- assertTrue(((DirectoryReader) r3).readOnly);
- r3.close();
-
- // Add new segment
- writer.addDocument(doc);
- writer.commit();
-
- // Reopen reader1 --> reader2
- IndexReader r2 = IndexReader.openIfChanged(r, true);
- assertNotNull(r2);
- r.close();
- assertTrue(((DirectoryReader) r2).readOnly);
- IndexReader[] subs = r2.getSequentialSubReaders();
- final int[] ints2 = FieldCache.DEFAULT.getInts(subs[0], "number", false);
- r2.close();
-
- assertTrue(((SegmentReader) subs[0]).readOnly);
- assertTrue(((SegmentReader) subs[1]).readOnly);
- assertTrue(ints == ints2);
-
- writer.close();
- dir.close();
- }
}
Modified: lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=1214623&r1=1214622&r2=1214623&view=diff
==============================================================================
--- lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/dev/branches/solrcloud/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java Thu Dec 15 05:11:14 2011
@@ -90,19 +90,19 @@ public class TestIndexWriter extends Luc
// add 100 documents
for (i = 0; i < 100; i++) {
- addDoc(writer);
+ addDocWithIndex(writer,i);
}
assertEquals(100, writer.maxDoc());
writer.close();
// delete 40 documents
- reader = IndexReader.open(dir, false);
+ writer = new IndexWriter(dir, newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random)).setMergePolicy(NoMergePolicy.NO_COMPOUND_FILES));
for (i = 0; i < 40; i++) {
- reader.deleteDocument(i);
+ writer.deleteDocuments(new Term("id", ""+i));
}
- reader.close();
+ writer.close();
- reader = IndexReader.open(dir, true);
+ reader = IndexReader.open(dir);
assertEquals(60, reader.numDocs());
reader.close();
@@ -115,7 +115,7 @@ public class TestIndexWriter extends Luc
writer.close();
// check that the index reader gives the same numbers.
- reader = IndexReader.open(dir, true);
+ reader = IndexReader.open(dir);
assertEquals(60, reader.maxDoc());
assertEquals(60, reader.numDocs());
reader.close();
@@ -182,7 +182,7 @@ public class TestIndexWriter extends Luc
writer.close();
// now open reader:
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
assertEquals("should be one document", reader.numDocs(), 1);
// now open index for create:
@@ -192,7 +192,7 @@ public class TestIndexWriter extends Luc
writer.close();
assertEquals("should be one document", reader.numDocs(), 1);
- IndexReader reader2 = IndexReader.open(dir, true);
+ IndexReader reader2 = IndexReader.open(dir);
assertEquals("should be one document", reader2.numDocs(), 1);
reader.close();
reader2.close();
@@ -227,7 +227,7 @@ public class TestIndexWriter extends Luc
writer.commit();
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
assertEquals(0, reader.maxDoc());
assertEquals(0, reader.numDocs());
reader.close();
@@ -236,7 +236,7 @@ public class TestIndexWriter extends Luc
writer.commit();
writer.close();
- reader = IndexReader.open(dir, true);
+ reader = IndexReader.open(dir);
assertEquals(0, reader.maxDoc());
assertEquals(0, reader.numDocs());
reader.close();
@@ -258,7 +258,7 @@ public class TestIndexWriter extends Luc
}
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
assertEquals(100, reader.maxDoc());
assertEquals(100, reader.numDocs());
for(int j=0;j<100;j++) {
@@ -452,11 +452,10 @@ public class TestIndexWriter extends Luc
}
writer.close();
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
ScoreDoc[] hits = searcher.search(new TermQuery(new Term("field", "aaa")), null, 1000).scoreDocs;
assertEquals(300, hits.length);
- searcher.close();
reader.close();
dir.close();
@@ -484,11 +483,10 @@ public class TestIndexWriter extends Luc
Term searchTerm = new Term("field", "aaa");
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
assertEquals(10, hits.length);
- searcher.close();
reader.close();
writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random))
@@ -507,14 +505,13 @@ public class TestIndexWriter extends Luc
writer.addDocument(doc);
}
writer.close();
- reader = IndexReader.open(dir, false);
+ reader = IndexReader.open(dir);
searcher = new IndexSearcher(reader);
hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
assertEquals(27, hits.length);
- searcher.close();
reader.close();
- reader = IndexReader.open(dir, true);
+ reader = IndexReader.open(dir);
reader.close();
dir.close();
@@ -541,7 +538,7 @@ public class TestIndexWriter extends Luc
writer.addDocument(doc);
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
assertEquals(1, reader.maxDoc());
assertEquals(1, reader.numDocs());
Term t = new Term("field", "a");
@@ -586,11 +583,10 @@ public class TestIndexWriter extends Luc
}
writer.close();
Term searchTerm = new Term("content", "aaa");
- IndexReader reader = IndexReader.open(dir, false);
+ IndexReader reader = IndexReader.open(dir);
IndexSearcher searcher = new IndexSearcher(reader);
ScoreDoc[] hits = searcher.search(new TermQuery(searchTerm), null, 1000).scoreDocs;
assertEquals("did not get right number of hits", 100, hits.length);
- searcher.close();
reader.close();
writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random))
@@ -643,7 +639,7 @@ public class TestIndexWriter extends Luc
}
writer.addDocument(new Document());
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
assertEquals(2, reader.numDocs());
reader.close();
dir.close();
@@ -698,7 +694,6 @@ public class TestIndexWriter extends Luc
public void testVariableSchema() throws Exception {
Directory dir = newDirectory();
- int delID = 0;
for(int i=0;i<20;i++) {
if (VERBOSE) {
System.out.println("TEST: iter=" + i);
@@ -730,9 +725,6 @@ public class TestIndexWriter extends Luc
writer.addDocument(doc);
writer.close();
- IndexReader reader = IndexReader.open(dir, false);
- reader.deleteDocument(delID++);
- reader.close();
if (0 == i % 4) {
writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random)));
@@ -830,7 +822,7 @@ public class TestIndexWriter extends Luc
t1.join();
// Make sure reader can read
- IndexReader reader = IndexReader.open(directory, true);
+ IndexReader reader = IndexReader.open(directory);
reader.close();
// Reopen
@@ -858,7 +850,7 @@ public class TestIndexWriter extends Luc
writer.addDocument(doc);
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
Term t = new Term("field", "x");
assertEquals(1, reader.docFreq(t));
reader.close();
@@ -885,7 +877,7 @@ public class TestIndexWriter extends Luc
doc.add(newField("", "a b c", TextField.TYPE_UNSTORED));
writer.addDocument(doc);
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
IndexReader subreader = getOnlySegmentReader(reader);
TermsEnum te = subreader.fields().terms("").iterator(null);
assertEquals(new BytesRef("a"), te.next());
@@ -906,7 +898,7 @@ public class TestIndexWriter extends Luc
doc.add(newField("", "c", StringField.TYPE_UNSTORED));
writer.addDocument(doc);
writer.close();
- IndexReader reader = IndexReader.open(dir, true);
+ IndexReader reader = IndexReader.open(dir);
IndexReader subreader = getOnlySegmentReader(reader);
TermsEnum te = subreader.fields().terms("").iterator(null);
assertEquals(new BytesRef(""), te.next());
@@ -960,7 +952,7 @@ public class TestIndexWriter extends Luc
assertTrue(w.afterWasCalled);
w.close();
- IndexReader ir = IndexReader.open(dir, true);
+ IndexReader ir = IndexReader.open(dir);
assertEquals(0, ir.numDocs());
ir.close();
@@ -994,7 +986,7 @@ public class TestIndexWriter extends Luc
w.addDocument(doc);
w.commit();
- IndexReader r = IndexReader.open(dir, false);
+ IndexReader r = IndexReader.open(dir);
IndexSearcher s = new IndexSearcher(r);
PhraseQuery pq = new PhraseQuery();
pq.add(new Term("field", "a"));
@@ -1017,7 +1009,6 @@ public class TestIndexWriter extends Luc
assertEquals(0, tps.nextPosition());
w.close();
- s.close();
r.close();
dir.close();
}
@@ -1043,7 +1034,7 @@ public class TestIndexWriter extends Luc
w.addDocument(doc);
w.close();
- IndexReader ir = IndexReader.open(dir, true);
+ IndexReader ir = IndexReader.open(dir);
Document doc2 = ir.document(0);
IndexableField f2 = doc2.getField("binary");
b = f2.binaryValue().bytes;
@@ -1072,7 +1063,7 @@ public class TestIndexWriter extends Luc
w.addDocument(doc);
w.close();
- IndexReader r = IndexReader.open(dir, true);
+ IndexReader r = IndexReader.open(dir);
Terms tpv = r.getTermVectors(0).terms("field");
TermsEnum termsEnum = tpv.iterator(null);
assertNotNull(termsEnum.next());
@@ -1136,12 +1127,12 @@ public class TestIndexWriter extends Luc
writer2.addDocument(doc);
writer2.close();
- IndexReader r1 = IndexReader.open(dir2, true);
+ IndexReader r1 = IndexReader.open(dir2);
IndexReader r2 = (IndexReader) r1.clone();
writer.addIndexes(r1, r2);
writer.close();
- IndexReader r3 = IndexReader.open(dir, true);
+ IndexReader r3 = IndexReader.open(dir);
assertEquals(5, r3.numDocs());
r3.close();
@@ -1186,7 +1177,7 @@ public class TestIndexWriter extends Luc
w.close();
w = null;
_TestUtil.checkIndex(dir);
- IndexReader.open(dir, true).close();
+ IndexReader.open(dir).close();
// Strangely, if we interrupt a thread before
// all classes are loaded, the class loader
@@ -1236,7 +1227,7 @@ public class TestIndexWriter extends Luc
e.printStackTrace(System.out);
}
try {
- IndexReader r = IndexReader.open(dir, true);
+ IndexReader r = IndexReader.open(dir);
//System.out.println("doc count=" + r.numDocs());
r.close();
} catch (Exception e) {
@@ -1322,7 +1313,7 @@ public class TestIndexWriter extends Luc
w.forceMerge(1); // force segment merge.
w.close();
- IndexReader ir = IndexReader.open(dir, true);
+ IndexReader ir = IndexReader.open(dir);
Document doc2 = ir.document(0);
IndexableField f3 = doc2.getField("binary");
b = f3.binaryValue().bytes;
@@ -1712,7 +1703,6 @@ public class TestIndexWriter extends Luc
assertEquals("doc " + testID + ", field f" + fieldCount + " is wrong", docExp.get("f"+i), doc.get("f"+i));
}
}
- s.close();
r.close();
w.forceMerge(1);
}