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