You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@lucene.apache.org by Shai Erera <se...@gmail.com> on 2010/04/11 14:29:26 UTC

Re: svn commit: r932868 - in /lucene/dev/trunk/lucene: ./ backwards/src/test/org/apache/lucene/ backwards/src/test/org/apache/lucene/index/ backwards/src/test/org/apache/lucene/store/ contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/buil

Robert notified me that Solr tests are failing due to that commit. I
apologize but I haven't run Solr tests (still was on a Lucene only
checkout). I'm currently checking out Solr code and will run the test and
investigate. Just FYI

Again - I apologize. My bad !

Shai

On Sun, Apr 11, 2010 at 2:31 PM, <sh...@apache.org> wrote:

> Author: shaie
> Date: Sun Apr 11 11:31:09 2010
> New Revision: 932868
>
> URL: http://svn.apache.org/viewvc?rev=932868&view=rev
> Log:
> LUCENE-2386: IndexWriter commits unnecessarily on fresh Directory
>
> Added:
>
>  lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java
>   (with props)
> Modified:
>    lucene/dev/trunk/lucene/CHANGES.txt
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestCrash.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestDeletionPolicy.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterReader.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing2.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestLockFactory.java
>
>  lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java
>
>  lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java
>
>  lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
>
>  lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
>
>  lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
>
>  lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
>    lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestCrash.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestDeletionPolicy.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing2.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestLockFactory.java
>
>  lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestWindowsMMap.java
>
> Modified: lucene/dev/trunk/lucene/CHANGES.txt
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> --- lucene/dev/trunk/lucene/CHANGES.txt (original)
> +++ lucene/dev/trunk/lucene/CHANGES.txt Sun Apr 11 11:31:09 2010
> @@ -105,6 +105,12 @@ Changes in backwards compatibility polic
>   of incrementToken(), tokenStream(), and reusableTokenStream().
>   (Uwe Schindler, Robert Muir)
>
> +* LUCENE-2386: IndexWriter no longer performs an empty commit upon new
> index
> +  creation. Previously, if you passed an empty Directory and set OpenMode
> to
> +  CREATE*, IndexWriter would make a first empty commit. If you need that
> +  behavior you can call writer.commit() immediately after you create it.
> +  (Shai Erera, Mike McCandless)
> +
>  Changes in runtime behavior
>
>  * LUCENE-1923: Made IndexReader.toString() produce something
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
> Sun Apr 11 11:31:09 2010
> @@ -113,7 +113,7 @@ public class TestSnapshotDeletionPolicy
>
>     SnapshotDeletionPolicy dp = new SnapshotDeletionPolicy(new
> KeepOnlyLastCommitDeletionPolicy());
>     final IndexWriter writer = new IndexWriter(dir, new
> StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT), dp,
> IndexWriter.MaxFieldLength.UNLIMITED);
> -
> +    writer.commit();
>     // Force frequent flushes
>     writer.setMaxBufferedDocs(2);
>
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> Sun Apr 11 11:31:09 2010
> @@ -553,7 +553,7 @@ public class TestBackwardsCompatibility
>       expected = new String[] {"_0.cfs",
>                                "_0_1.del",
>                                "_0_1.s" + contentFieldIndex,
> -                               "segments_3",
> +                               "segments_2",
>                                "segments.gen"};
>
>       String[] actual = dir.listAll();
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestCrash.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestCrash.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestCrash.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestCrash.java
> Sun Apr 11 11:31:09 2010
> @@ -25,20 +25,24 @@ import org.apache.lucene.store.MockRAMDi
>  import org.apache.lucene.store.NoLockFactory;
>  import org.apache.lucene.document.Document;
>  import org.apache.lucene.document.Field;
> +import org.apache.lucene.index.IndexWriter;
>
>  public class TestCrash extends LuceneTestCase {
>
> -  private IndexWriter initIndex() throws IOException {
> -    return initIndex(new MockRAMDirectory());
> +  private IndexWriter initIndex(boolean initialCommit) throws IOException
> {
> +    return initIndex(new MockRAMDirectory(), initialCommit);
>   }
>
> -  private IndexWriter initIndex(MockRAMDirectory dir) throws IOException {
> +  private IndexWriter initIndex(MockRAMDirectory dir, boolean
> initialCommit) throws IOException {
>     dir.setLockFactory(NoLockFactory.getNoLockFactory());
>
>     IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(),
> IndexWriter.MaxFieldLength.UNLIMITED);
>     //writer.setMaxBufferedDocs(2);
>     writer.setMaxBufferedDocs(10);
>     ((ConcurrentMergeScheduler)
> writer.getMergeScheduler()).setSuppressExceptions();
> +    if (initialCommit) {
> +      writer.commit();
> +    }
>
>     Document doc = new Document();
>     doc.add(new Field("content", "aaa", Field.Store.YES,
> Field.Index.ANALYZED));
> @@ -58,7 +62,7 @@ public class TestCrash extends LuceneTes
>   }
>
>   public void testCrashWhileIndexing() throws IOException {
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(true);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>     crash(writer);
>     IndexReader reader = IndexReader.open(dir, false);
> @@ -66,11 +70,11 @@ public class TestCrash extends LuceneTes
>   }
>
>   public void testWriterAfterCrash() throws IOException {
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(true);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>     dir.setPreventDoubleWrite(false);
>     crash(writer);
> -    writer = initIndex(dir);
> +    writer = initIndex(dir, false);
>     writer.close();
>
>     IndexReader reader = IndexReader.open(dir, false);
> @@ -78,10 +82,10 @@ public class TestCrash extends LuceneTes
>   }
>
>   public void testCrashAfterReopen() throws IOException {
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>     writer.close();
> -    writer = initIndex(dir);
> +    writer = initIndex(dir, false);
>     assertEquals(314, writer.maxDoc());
>     crash(writer);
>
> @@ -100,7 +104,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashAfterClose() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close();
> @@ -119,7 +123,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashAfterCloseNoWait() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close(false);
> @@ -138,7 +142,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashReaderDeletes() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close(false);
> @@ -159,7 +163,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashReaderDeletesAfterClose() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close(false);
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestDeletionPolicy.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestDeletionPolicy.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestDeletionPolicy.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestDeletionPolicy.java
> Sun Apr 11 11:31:09 2010
> @@ -290,7 +290,7 @@ public class TestDeletionPolicy extends
>       writer.optimize();
>       writer.close();
>
> -      assertEquals(2, policy.numOnInit);
> +      assertEquals(1, policy.numOnInit);
>
>       // If we are not auto committing then there should
>       // be exactly 2 commits (one per close above):
> @@ -298,8 +298,8 @@ public class TestDeletionPolicy extends
>
>       // Test listCommits
>       Collection commits = IndexReader.listCommits(dir);
> -      // 1 from opening writer + 2 from closing writer
> -      assertEquals(3, commits.size());
> +      // 2 from closing writer
> +      assertEquals(2, commits.size());
>
>       Iterator it = commits.iterator();
>       // Make sure we can open a reader on each commit:
> @@ -357,7 +357,7 @@ public class TestDeletionPolicy extends
>     writer.close();
>
>     Collection commits = IndexReader.listCommits(dir);
> -    assertEquals(6, commits.size());
> +    assertEquals(5, commits.size());
>     IndexCommit lastCommit = null;
>     Iterator it = commits.iterator();
>     while(it.hasNext()) {
> @@ -374,7 +374,7 @@ public class TestDeletionPolicy extends
>     writer.optimize();
>     writer.close();
>
> -    assertEquals(7, IndexReader.listCommits(dir).size());
> +    assertEquals(6, IndexReader.listCommits(dir).size());
>
>     // Now open writer on the commit just before optimize:
>     writer = new IndexWriter(dir, new WhitespaceAnalyzer(), policy,
> IndexWriter.MaxFieldLength.LIMITED, lastCommit);
> @@ -395,7 +395,7 @@ public class TestDeletionPolicy extends
>     writer.close();
>
>     // Now 8 because we made another commit
> -    assertEquals(8, IndexReader.listCommits(dir).size());
> +    assertEquals(7, IndexReader.listCommits(dir).size());
>
>     r = IndexReader.open(dir, true);
>     // Not optimized because we rolled it back, and now only
> @@ -465,7 +465,7 @@ public class TestDeletionPolicy extends
>       writer.optimize();
>       writer.close();
>
> -      assertEquals(2, policy.numOnInit);
> +      assertEquals(1, policy.numOnInit);
>       // If we are not auto committing then there should
>       // be exactly 2 commits (one per close above):
>       assertEquals(2, policy.numOnCommit);
> @@ -506,7 +506,7 @@ public class TestDeletionPolicy extends
>       }
>
>       assertTrue(policy.numDelete > 0);
> -      assertEquals(N+1, policy.numOnInit);
> +      assertEquals(N, policy.numOnInit);
>       assertEquals(N+1, policy.numOnCommit);
>
>       // Simplistic check: just verify only the past N segments_N's still
> @@ -580,8 +580,8 @@ public class TestDeletionPolicy extends
>       // this is a commit
>       writer.close();
>
> -      assertEquals(2*(N+2), policy.numOnInit);
> -      assertEquals(2*(N+2)-1, policy.numOnCommit);
> +      assertEquals(2*(N+1)+1, policy.numOnInit);
> +      assertEquals(2*(N+2), policy.numOnCommit);
>
>       IndexSearcher searcher = new IndexSearcher(dir, false);
>       ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
> @@ -678,8 +678,8 @@ public class TestDeletionPolicy extends
>         writer.close();
>       }
>
> -      assertEquals(1+3*(N+1), policy.numOnInit);
> -      assertEquals(3*(N+1), policy.numOnCommit);
> +      assertEquals(3*(N+1), policy.numOnInit);
> +      assertEquals(3*(N+1)+1, policy.numOnCommit);
>
>       IndexSearcher searcher = new IndexSearcher(dir, false);
>       ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexFileDeleter.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
> Sun Apr 11 11:31:09 2010
> @@ -136,11 +136,11 @@ public class TestIndexFileDeleter extend
>     copyFile(dir, "_0.cfs", "deletable");
>
>     // Create some old segments file:
> -    copyFile(dir, "segments_3", "segments");
> -    copyFile(dir, "segments_3", "segments_2");
> +    copyFile(dir, "segments_2", "segments");
> +    copyFile(dir, "segments_2", "segments_1");
>
>     // Create a bogus cfs file shadowing a non-cfs segment:
> -    copyFile(dir, "_2.cfs", "_3.cfs");
> +    copyFile(dir, "_1.cfs", "_2.cfs");
>
>     String[] filesPre = dir.listAll();
>
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReader.java
> Sun Apr 11 11:31:09 2010
> @@ -39,6 +39,7 @@ import org.apache.lucene.document.Field;
>  import org.apache.lucene.document.FieldSelector;
>  import org.apache.lucene.document.Fieldable;
>  import org.apache.lucene.document.SetBasedFieldSelector;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.index.IndexReader.FieldOption;
>  import org.apache.lucene.search.FieldCache;
>  import org.apache.lucene.search.IndexSearcher;
> @@ -474,6 +475,7 @@ public class TestIndexReader extends Luc
>
>         //  add 11 documents with term : aaa
>         writer  = new IndexWriter(dir, new WhitespaceAnalyzer(), true,
> IndexWriter.MaxFieldLength.LIMITED);
> +        writer.commit();
>         for (int i = 0; i < 11; i++)
>         {
>             addDoc(writer, searchTerm.text());
> @@ -1765,6 +1767,7 @@ public class TestIndexReader extends Luc
>   public void testPrepareCommitIsCurrent() throws Throwable {
>     Directory dir = new MockRAMDirectory();
>     IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
> IndexWriter.MaxFieldLength.UNLIMITED);
> +    writer.commit();
>     Document doc = new Document();
>     writer.addDocument(doc);
>     IndexReader r = IndexReader.open(dir, true);
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
> Sun Apr 11 11:31:09 2010
> @@ -36,6 +36,7 @@ import org.apache.lucene.document.Docume
>  import org.apache.lucene.document.Field;
>  import org.apache.lucene.document.Field.Index;
>  import org.apache.lucene.document.Field.Store;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.index.IndexWriter.MaxFieldLength;
>  import org.apache.lucene.search.IndexSearcher;
>  import org.apache.lucene.search.ScoreDoc;
> @@ -172,6 +173,7 @@ public class TestIndexReaderReopen exten
>   private void doTestReopenWithCommit (Directory dir, boolean withReopen)
> throws IOException {
>     IndexWriter iwriter = new IndexWriter(dir, new KeywordAnalyzer(), true,
> MaxFieldLength.LIMITED);
>     iwriter.setMergeScheduler(new SerialMergeScheduler());
> +    iwriter.commit();
>     IndexReader reader = IndexReader.open(dir, false);
>     try {
>       int M = 3;
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriter.java
> Sun Apr 11 11:31:09 2010
> @@ -47,6 +47,7 @@ import org.apache.lucene.analysis.tokena
>  import
> org.apache.lucene.analysis.tokenattributes.PositionIncrementAttribute;
>  import org.apache.lucene.document.Document;
>  import org.apache.lucene.document.Field;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.search.IndexSearcher;
>  import org.apache.lucene.search.PhraseQuery;
>  import org.apache.lucene.search.Query;
> @@ -783,7 +784,7 @@ public class TestIndexWriter extends Luc
>         writer.close();
>
>         long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -        assertTrue("segment generation should be > 1 but got " + gen, gen
> > 1);
> +        assertTrue("segment generation should be > 0 but got " + gen, gen
> > 0);
>
>         // Make the next segments file, with last byte
>         // missing, to simulate a writer that crashed while
> @@ -843,7 +844,7 @@ public class TestIndexWriter extends Luc
>         writer.close();
>
>         long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -        assertTrue("segment generation should be > 1 but got " + gen, gen
> > 1);
> +        assertTrue("segment generation should be > 0 but got " + gen, gen
> > 0);
>
>         String fileNameIn = SegmentInfos.getCurrentSegmentFileName(dir);
>         String fileNameOut =
> IndexFileNames.fileNameFromGeneration(IndexFileNames.SEGMENTS,
> @@ -908,7 +909,7 @@ public class TestIndexWriter extends Luc
>         writer.close();
>
>         long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -        assertTrue("segment generation should be > 1 but got " + gen, gen
> > 1);
> +        assertTrue("segment generation should be > 0 but got " + gen, gen
> > 0);
>
>         String[] files = dir.listAll();
>         for(int i=0;i<files.length;i++) {
> @@ -2324,7 +2325,7 @@ public class TestIndexWriter extends Luc
>   public void testImmediateDiskFull() throws IOException {
>     MockRAMDirectory dir = new MockRAMDirectory();
>     IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
> IndexWriter.MaxFieldLength.LIMITED);
> -    dir.setMaxSizeInBytes(dir.getRecomputedActualSizeInBytes());
> +    dir.setMaxSizeInBytes(Math.max(1,
> dir.getRecomputedActualSizeInBytes()));
>     writer.setMaxBufferedDocs(2);
>     final Document doc = new Document();
>     doc.add(new Field("field", "aaa bbb ccc ddd eee fff ggg hhh iii jjj",
> Field.Store.YES, Field.Index.ANALYZED,
> Field.TermVector.WITH_POSITIONS_OFFSETS));
> @@ -2647,7 +2648,7 @@ public class TestIndexWriter extends Luc
>     writer.close();
>
>     long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -    assertTrue("segment generation should be > 1 but got " + gen, gen >
> 1);
> +    assertTrue("segment generation should be > 0 but got " + gen, gen >
> 0);
>
>     final String segmentsFileName =
> SegmentInfos.getCurrentSegmentFileName(dir);
>     IndexInput in = dir.openInput(segmentsFileName);
> @@ -2675,7 +2676,8 @@ public class TestIndexWriter extends Luc
>     IndexWriter writer  = new IndexWriter(dir, new WhitespaceAnalyzer(),
> IndexWriter.MaxFieldLength.LIMITED);
>     writer.setMaxBufferedDocs(2);
>     writer.setMergeFactor(5);
> -
> +    writer.commit();
> +
>     for (int i = 0; i < 23; i++)
>       addDoc(writer);
>
> @@ -3542,7 +3544,8 @@ public class TestIndexWriter extends Luc
>     IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
> IndexWriter.MaxFieldLength.LIMITED);
>     writer.setMaxBufferedDocs(2);
>     writer.setMergeFactor(5);
> -
> +    writer.commit();
> +
>     for (int i = 0; i < 23; i++)
>       addDoc(writer);
>
> @@ -3595,7 +3598,8 @@ public class TestIndexWriter extends Luc
>
>     writer.setMaxBufferedDocs(2);
>     writer.setMergeFactor(5);
> -
> +    writer.commit();
> +
>     for (int i = 0; i < 23; i++)
>       addDoc(writer);
>
> @@ -3679,6 +3683,7 @@ public class TestIndexWriter extends Luc
>
>       dir2 = new MockRAMDirectory();
>       writer2 = new IndexWriter(dir2, new WhitespaceAnalyzer(),
> IndexWriter.MaxFieldLength.LIMITED);
> +      writer2.commit();
>       cms = (ConcurrentMergeScheduler) writer2.getMergeScheduler();
>
>       readers = new IndexReader[NUM_COPY];
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterDelete.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
> Sun Apr 11 11:31:09 2010
> @@ -23,6 +23,7 @@ import java.util.Arrays;
>  import org.apache.lucene.analysis.WhitespaceAnalyzer;
>  import org.apache.lucene.document.Document;
>  import org.apache.lucene.document.Field;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.search.IndexSearcher;
>  import org.apache.lucene.search.ScoreDoc;
>  import org.apache.lucene.search.TermQuery;
> @@ -764,7 +765,7 @@ public class TestIndexWriterDelete exten
>     MockRAMDirectory dir = new MockRAMDirectory();
>     IndexWriter modifier = new IndexWriter(dir,
>                                            new WhitespaceAnalyzer(), true,
> IndexWriter.MaxFieldLength.UNLIMITED);
> -
> +    modifier.commit();
>     dir.failOn(failure.reset());
>
>     for (int i = 0; i < keywords.length; i++) {
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
> Sun Apr 11 11:31:09 2010
> @@ -138,7 +138,8 @@ public class TestIndexWriterExceptions e
>     ((ConcurrentMergeScheduler)
> writer.getMergeScheduler()).setSuppressExceptions();
>     //writer.setMaxBufferedDocs(10);
>     writer.setRAMBufferSizeMB(0.1);
> -
> +    writer.commit();
> +
>     if (DEBUG)
>       writer.setInfoStream(System.out);
>
> @@ -176,6 +177,7 @@ public class TestIndexWriterExceptions e
>     ((ConcurrentMergeScheduler)
> writer.getMergeScheduler()).setSuppressExceptions();
>     //writer.setMaxBufferedDocs(10);
>     writer.setRAMBufferSizeMB(0.2);
> +    writer.commit();
>
>     if (DEBUG)
>       writer.setInfoStream(System.out);
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterReader.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterReader.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterReader.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestIndexWriterReader.java
> Sun Apr 11 11:31:09 2010
> @@ -30,6 +30,7 @@ import org.apache.lucene.document.Field;
>  import org.apache.lucene.document.Field.Index;
>  import org.apache.lucene.document.Field.Store;
>  import org.apache.lucene.document.Field.TermVector;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.search.TermQuery;
>  import org.apache.lucene.search.IndexSearcher;
>  import org.apache.lucene.search.Query;
> @@ -642,6 +643,7 @@ public class TestIndexWriterReader exten
>     Directory dir1 = new MockRAMDirectory();
>     IndexWriter writer = new IndexWriter(dir1, new WhitespaceAnalyzer(),
>
>  IndexWriter.MaxFieldLength.LIMITED);
> +    writer.commit();
>     writer.setInfoStream(infoStream);
>
>     // create the index
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing.java
> Sun Apr 11 11:31:09 2010
> @@ -19,6 +19,7 @@ package org.apache.lucene.index;
>  import org.apache.lucene.util.*;
>  import org.apache.lucene.store.*;
>  import org.apache.lucene.document.*;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.analysis.*;
>  import org.apache.lucene.search.*;
>  import org.apache.lucene.queryParser.*;
> @@ -121,7 +122,7 @@ public class TestStressIndexing extends
>   */
>   public void runStressTest(Directory directory, MergeScheduler
> mergeScheduler) throws Exception {
>     IndexWriter modifier = new IndexWriter(directory, ANALYZER, true,
> IndexWriter.MaxFieldLength.UNLIMITED);
> -
> +    modifier.commit();
>     modifier.setMaxBufferedDocs(10);
>
>     TimedThread[] threads = new TimedThread[4];
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing2.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing2.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing2.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/index/TestStressIndexing2.java
> Sun Apr 11 11:31:09 2010
> @@ -16,6 +16,7 @@ package org.apache.lucene.index;
>
>  import org.apache.lucene.store.*;
>  import org.apache.lucene.document.*;
> +import org.apache.lucene.index.IndexWriter;
>  import org.apache.lucene.analysis.*;
>
>  import org.apache.lucene.util.LuceneTestCase;
> @@ -124,6 +125,7 @@ public class TestStressIndexing2 extends
>   public DocsAndWriter indexRandomIWReader(int nThreads, int iterations,
> int range, Directory dir) throws IOException, InterruptedException {
>     Map docs = new HashMap();
>     IndexWriter w = new MockIndexWriter(dir, new WhitespaceAnalyzer(),
> true, IndexWriter.MaxFieldLength.UNLIMITED);
> +    w.commit();
>     w.setUseCompoundFile(false);
>
>     /***
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
> Sun Apr 11 11:31:09 2010
> @@ -241,6 +241,7 @@ public class TestBufferedIndexInput exte
>
>     public void testSetBufferSize() throws IOException {
>       File indexDir = new File(System.getProperty("tempDir"),
> "testSetBufferSize");
> +      indexDir.mkdirs(); // required for this MockFSDir since we don't
> commit on IW creation anymore.
>       MockFSDirectory dir = new MockFSDirectory(indexDir, newRandom());
>       try {
>         IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
> true, IndexWriter.MaxFieldLength.LIMITED);
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestLockFactory.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestLockFactory.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestLockFactory.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestLockFactory.java
> Sun Apr 11 11:31:09 2010
> @@ -85,7 +85,8 @@ public class TestLockFactory extends Luc
>
>         IndexWriter writer = new IndexWriter(dir, new WhitespaceAnalyzer(),
> true,
>
>  IndexWriter.MaxFieldLength.LIMITED);
> -
> +        writer.commit(); // required so the second open succeed
> +
>         // Create a 2nd IndexWriter.  This is normally not allowed but it
> should run through since we're not
>         // using any locks:
>         IndexWriter writer2 = null;
>
> Modified:
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java
> (original)
> +++
> lucene/dev/trunk/lucene/backwards/src/test/org/apache/lucene/store/TestWindowsMMap.java
> Sun Apr 11 11:31:09 2010
> @@ -64,14 +64,18 @@ public class TestWindowsMMap extends Luc
>     new
> File(System.getProperty("tempDir"),"testLuceneMmap").getAbsolutePath();
>
>   public void testMmapIndex() throws Exception {
> -    FSDirectory storeDirectory;
> -    storeDirectory = new MMapDirectory(new File(storePathname), null);
> +    // sometimes the directory is not cleaned by rmDir, because on Windows
> it
> +    // may take some time until the files are finally dereferenced. So
> clean the
> +    // directory up front, or otherwise new IndexWriter will fail.
> +    rmDir(new File(storePathname));
> +    FSDirectory storeDirectory = new MMapDirectory(new
> File(storePathname), null);
>
>     // plan to add a set of useful stopwords, consider changing some of the
>     // interior filters.
>     StandardAnalyzer analyzer = new
> StandardAnalyzer(org.apache.lucene.util.Version.LUCENE_CURRENT,
> Collections.emptySet());
>     // TODO: something about lock timeouts and leftover locks.
>     IndexWriter writer = new IndexWriter(storeDirectory, analyzer, true,
> IndexWriter.MaxFieldLength.LIMITED);
> +    writer.commit();
>     IndexSearcher searcher = new IndexSearcher(storeDirectory, true);
>
>     for(int dx = 0; dx < 1000; dx ++) {
> @@ -83,14 +87,16 @@ public class TestWindowsMMap extends Luc
>
>     searcher.close();
>     writer.close();
> -                rmDir(new File(storePathname));
> +    rmDir(new File(storePathname));
>   }
>
> -        private void rmDir(File dir) {
> -          File[] files = dir.listFiles();
> -          for (int i = 0; i < files.length; i++) {
> -            files[i].delete();
> -          }
> -          dir.delete();
> -        }
> +  private void rmDir(File dir) {
> +    if (!dir.exists()) {
> +      return;
> +    }
> +    for (File file : dir.listFiles()) {
> +      file.delete();
> +    }
> +    dir.delete();
> +  }
>  }
>
> Modified:
> lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java
> (original)
> +++
> lucene/dev/trunk/lucene/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/builders/TestNumericRangeFilterBuilder.java
> Sun Apr 11 11:31:09 2010
> @@ -29,6 +29,7 @@ import org.apache.lucene.util.LuceneTest
>
>  import org.apache.lucene.index.IndexReader;
>  import org.apache.lucene.index.IndexWriter;
> +import org.apache.lucene.index.IndexWriterConfig;
>  import org.apache.lucene.index.IndexWriter.MaxFieldLength;
>  import org.apache.lucene.search.Filter;
>  import org.apache.lucene.search.NumericRangeFilter;
> @@ -62,7 +63,8 @@ public class TestNumericRangeFilterBuild
>                Filter filter =
> filterBuilder.getFilter(doc.getDocumentElement());
>
>                RAMDirectory ramDir = new RAMDirectory();
> -               IndexWriter writer = new IndexWriter(ramDir, null,
> MaxFieldLength.UNLIMITED);
> +               IndexWriter writer = new IndexWriter(ramDir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, null));
> +               writer.commit();
>                try
>                {
>                        IndexReader reader = IndexReader.open(ramDir, true);
>
> Modified:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/DirectoryReader.java
> Sun Apr 11 11:31:09 2010
> @@ -1030,7 +1030,11 @@ class DirectoryReader extends IndexReade
>     Collection<IndexCommit> commits = new ArrayList<IndexCommit>();
>
>     SegmentInfos latest = new SegmentInfos();
> -    latest.read(dir, codecs);
> +    try {
> +      latest.read(dir, codecs);
> +    } catch (IndexNotFoundException e) {
> +      return Collections.emptyList();
> +    }
>     final long currentGen = latest.getGeneration();
>
>     commits.add(new ReaderCommit(latest, dir));
>
> Modified:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexFileDeleter.java
> Sun Apr 11 11:31:09 2010
> @@ -144,16 +144,13 @@ final class IndexFileDeleter {
>     long currentGen = segmentInfos.getGeneration();
>     indexFilenameFilter = new IndexFileNameFilter(codecs);
>
> -    String[] files = directory.listAll();
> -
>     CommitPoint currentCommitPoint = null;
> -
> -    for(int i=0;i<files.length;i++) {
> -
> -      String fileName = files[i];
> +    boolean seenIndexFiles = false;
> +    for (String fileName : directory.listAll()) {
>
>       if ((indexFilenameFilter.accept(null, fileName)) &&
> !fileName.endsWith("write.lock") &&
> !fileName.equals(IndexFileNames.SEGMENTS_GEN)) {
> -
> +        seenIndexFiles = true;
> +
>         // Add this file to refCounts with initial count 0:
>         getRefCount(fileName);
>
> @@ -195,7 +192,10 @@ final class IndexFileDeleter {
>       }
>     }
>
> -    if (currentCommitPoint == null) {
> +    // If we haven't seen any Lucene files, then currentCommitPoint is
> expected
> +    // to be null, because it means it's a fresh Directory. Therefore it
> cannot
> +    // be any NFS cache issues - so just ignore.
> +    if (currentCommitPoint == null && seenIndexFiles) {
>       // We did not in fact see the segments_N file
>       // corresponding to the segmentInfos that was passed
>       // in.  Yet, it must exist, because our caller holds
> @@ -235,13 +235,15 @@ final class IndexFileDeleter {
>
>     // Finally, give policy a chance to remove things on
>     // startup:
> -    policy.onInit(commits);
> +    if (seenIndexFiles) {
> +      policy.onInit(commits);
> +    }
>
>     // Always protect the incoming segmentInfos since
>     // sometime it may not be the most recent commit
>     checkpoint(segmentInfos, false);
>
> -    startingCommitDeleted = currentCommitPoint.isDeleted();
> +    startingCommitDeleted = currentCommitPoint == null ? false :
> currentCommitPoint.isDeleted();
>
>     deleteCommits();
>   }
>
> Added:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java?rev=932868&view=auto
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java
> (added)
> +++
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java
> Sun Apr 11 11:31:09 2010
> @@ -0,0 +1,15 @@
> +package org.apache.lucene.index;
> +
> +import java.io.FileNotFoundException;
> +
> +/**
> + * Signals that no index was found in the Directory. Possibly because the
> + * directory is empty, however can slso indicate an index corruption.
> + */
> +public final class IndexNotFoundException extends FileNotFoundException {
> +
> +  public IndexNotFoundException(String msg) {
> +    super(msg);
> +  }
> +
> +}
>
> Propchange:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java
>
> ------------------------------------------------------------------------------
>    svn:eol-style = native
>
> Propchange:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexNotFoundException.java
>
> ------------------------------------------------------------------------------
>    svn:keywords = Date Author Id Revision HeadURL
>
> Modified:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/IndexWriter.java
> Sun Apr 11 11:31:09 2010
> @@ -1115,25 +1115,16 @@ public class IndexWriter implements Clos
>         // against an index that's currently open for
>         // searching.  In this case we write the next
>         // segments_N file with no segments:
> -        boolean doCommit;
>         try {
>           segmentInfos.read(directory, codecs);
>           segmentInfos.clear();
> -          doCommit = false;
>         } catch (IOException e) {
>           // Likely this means it's a fresh directory
> -          doCommit = true;
>         }
>
> -        if (doCommit) {
> -          // Only commit if there is no segments file in
> -          // this dir already.
> -          segmentInfos.commit(directory);
> -        } else {
> -          // Record that we have a change (zero out all
> -          // segments) pending:
> -          changeCount++;
> -        }
> +        // Record that we have a change (zero out all
> +        // segments) pending:
> +        changeCount++;
>       } else {
>         segmentInfos.read(directory, codecs);
>
>
> Modified:
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/java/org/apache/lucene/index/SegmentInfos.java
> Sun Apr 11 11:31:09 2010
> @@ -649,7 +649,7 @@ public final class SegmentInfos extends
>
>           if (gen == -1) {
>             // Neither approach found a generation
> -            throw new FileNotFoundException("no segments* file found in "
> + directory + ": files: " + Arrays.toString(files));
> +            throw new IndexNotFoundException("no segments* file found in "
> + directory + ": files: " + Arrays.toString(files));
>           }
>         }
>
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/TestSnapshotDeletionPolicy.java
> Sun Apr 11 11:31:09 2010
> @@ -45,8 +45,8 @@ import org.apache.lucene.util._TestUtil;
>  // http://lucenebook.com
>  //
>
> -public class TestSnapshotDeletionPolicy extends LuceneTestCase
> -{
> +public class TestSnapshotDeletionPolicy extends LuceneTestCase {
> +
>   public static final String INDEX_PATH = "test.snapshots";
>
>   public void testSnapshotDeletionPolicy() throws Exception {
> @@ -119,7 +119,8 @@ public class TestSnapshotDeletionPolicy
>         TEST_VERSION_CURRENT,
>         new
> StandardAnalyzer(TEST_VERSION_CURRENT)).setIndexDeletionPolicy(dp)
>         .setMaxBufferedDocs(2));
> -
> +    writer.commit();
> +
>     final Thread t = new Thread() {
>         @Override
>         public void run() {
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> Sun Apr 11 11:31:09 2010
> @@ -558,11 +558,10 @@ public class TestBackwardsCompatibility
>       assertTrue("could not locate the 'content' field number in the _2.cfs
> segment", contentFieldIndex != -1);
>
>       // Now verify file names:
> -      String[] expected;
> -      expected = new String[] {"_0.cfs",
> +      String[] expected = new String[] {"_0.cfs",
>                                "_0_1.del",
>                                "_0_1.s" + contentFieldIndex,
> -                               "segments_3",
> +                               "segments_2",
>                                "segments.gen"};
>
>       String[] actual = dir.listAll();
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestCrash.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestCrash.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> --- lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestCrash.java
> (original)
> +++ lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestCrash.java
> Sun Apr 11 11:31:09 2010
> @@ -28,16 +28,19 @@ import org.apache.lucene.document.Field;
>
>  public class TestCrash extends LuceneTestCase {
>
> -  private IndexWriter initIndex() throws IOException {
> -    return initIndex(new MockRAMDirectory());
> +  private IndexWriter initIndex(boolean initialCommit) throws IOException
> {
> +    return initIndex(new MockRAMDirectory(), initialCommit);
>   }
>
> -  private IndexWriter initIndex(MockRAMDirectory dir) throws IOException {
> +  private IndexWriter initIndex(MockRAMDirectory dir, boolean
> initialCommit) throws IOException {
>     dir.setLockFactory(NoLockFactory.getNoLockFactory());
>
>     IndexWriter writer  = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(10));
>     ((ConcurrentMergeScheduler)
> writer.getConfig().getMergeScheduler()).setSuppressExceptions();
> -
> +    if (initialCommit) {
> +      writer.commit();
> +    }
> +
>     Document doc = new Document();
>     doc.add(new Field("content", "aaa", Field.Store.YES,
> Field.Index.ANALYZED));
>     doc.add(new Field("id", "0", Field.Store.YES, Field.Index.ANALYZED));
> @@ -56,7 +59,10 @@ public class TestCrash extends LuceneTes
>   }
>
>   public void testCrashWhileIndexing() throws IOException {
> -    IndexWriter writer = initIndex();
> +    // This test relies on being able to open a reader before any commit
> +    // happened, so we must create an initial commit just to allow that,
> but
> +    // before any documents were added.
> +    IndexWriter writer = initIndex(true);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>     crash(writer);
>     IndexReader reader = IndexReader.open(dir, false);
> @@ -64,11 +70,14 @@ public class TestCrash extends LuceneTes
>   }
>
>   public void testWriterAfterCrash() throws IOException {
> -    IndexWriter writer = initIndex();
> +    // This test relies on being able to open a reader before any commit
> +    // happened, so we must create an initial commit just to allow that,
> but
> +    // before any documents were added.
> +    IndexWriter writer = initIndex(true);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>     dir.setPreventDoubleWrite(false);
>     crash(writer);
> -    writer = initIndex(dir);
> +    writer = initIndex(dir, false);
>     writer.close();
>
>     IndexReader reader = IndexReader.open(dir, false);
> @@ -76,10 +85,10 @@ public class TestCrash extends LuceneTes
>   }
>
>   public void testCrashAfterReopen() throws IOException {
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>     writer.close();
> -    writer = initIndex(dir);
> +    writer = initIndex(dir, false);
>     assertEquals(314, writer.maxDoc());
>     crash(writer);
>
> @@ -98,7 +107,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashAfterClose() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close();
> @@ -117,7 +126,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashAfterCloseNoWait() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close(false);
> @@ -136,7 +145,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashReaderDeletes() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close(false);
> @@ -157,7 +166,7 @@ public class TestCrash extends LuceneTes
>
>   public void testCrashReaderDeletesAfterClose() throws IOException {
>
> -    IndexWriter writer = initIndex();
> +    IndexWriter writer = initIndex(false);
>     MockRAMDirectory dir = (MockRAMDirectory) writer.getDirectory();
>
>     writer.close(false);
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestDeletionPolicy.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestDeletionPolicy.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestDeletionPolicy.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestDeletionPolicy.java
> Sun Apr 11 11:31:09 2010
> @@ -305,7 +305,7 @@ public class TestDeletionPolicy extends
>       writer.optimize();
>       writer.close();
>
> -      assertEquals(2, policy.numOnInit);
> +      assertEquals(1, policy.numOnInit);
>
>       // If we are not auto committing then there should
>       // be exactly 2 commits (one per close above):
> @@ -313,8 +313,8 @@ public class TestDeletionPolicy extends
>
>       // Test listCommits
>       Collection<IndexCommit> commits = IndexReader.listCommits(dir);
> -      // 1 from opening writer + 2 from closing writer
> -      assertEquals(3, commits.size());
> +      // 2 from closing writer
> +      assertEquals(2, commits.size());
>
>       // Make sure we can open a reader on each commit:
>       for (final IndexCommit commit : commits) {
> @@ -374,7 +374,7 @@ public class TestDeletionPolicy extends
>     writer.close();
>
>     Collection<IndexCommit> commits = IndexReader.listCommits(dir);
> -    assertEquals(6, commits.size());
> +    assertEquals(5, commits.size());
>     IndexCommit lastCommit = null;
>     for (final IndexCommit commit : commits) {
>       if (lastCommit == null || commit.getGeneration() >
> lastCommit.getGeneration())
> @@ -389,7 +389,7 @@ public class TestDeletionPolicy extends
>     writer.optimize();
>     writer.close();
>
> -    assertEquals(7, IndexReader.listCommits(dir).size());
> +    assertEquals(6, IndexReader.listCommits(dir).size());
>
>     // Now open writer on the commit just before optimize:
>     writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT))
> @@ -412,7 +412,7 @@ public class TestDeletionPolicy extends
>     writer.close();
>
>     // Now 8 because we made another commit
> -    assertEquals(8, IndexReader.listCommits(dir).size());
> +    assertEquals(7, IndexReader.listCommits(dir).size());
>
>     r = IndexReader.open(dir, true);
>     // Not optimized because we rolled it back, and now only
> @@ -491,7 +491,7 @@ public class TestDeletionPolicy extends
>       writer.optimize();
>       writer.close();
>
> -      assertEquals(2, policy.numOnInit);
> +      assertEquals(1, policy.numOnInit);
>       // If we are not auto committing then there should
>       // be exactly 2 commits (one per close above):
>       assertEquals(2, policy.numOnCommit);
> @@ -537,7 +537,7 @@ public class TestDeletionPolicy extends
>       }
>
>       assertTrue(policy.numDelete > 0);
> -      assertEquals(N+1, policy.numOnInit);
> +      assertEquals(N, policy.numOnInit);
>       assertEquals(N+1, policy.numOnCommit);
>
>       // Simplistic check: just verify only the past N segments_N's still
> @@ -625,8 +625,8 @@ public class TestDeletionPolicy extends
>       // this is a commit
>       writer.close();
>
> -      assertEquals(2*(N+2), policy.numOnInit);
> -      assertEquals(2*(N+2)-1, policy.numOnCommit);
> +      assertEquals(2*(N+1)+1, policy.numOnInit);
> +      assertEquals(2*(N+2), policy.numOnCommit);
>
>       IndexSearcher searcher = new IndexSearcher(dir, false);
>       ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
> @@ -735,8 +735,8 @@ public class TestDeletionPolicy extends
>         writer.close();
>       }
>
> -      assertEquals(1+3*(N+1), policy.numOnInit);
> -      assertEquals(3*(N+1), policy.numOnCommit);
> +      assertEquals(3*(N+1), policy.numOnInit);
> +      assertEquals(3*(N+1)+1, policy.numOnCommit);
>
>       IndexSearcher searcher = new IndexSearcher(dir, false);
>       ScoreDoc[] hits = searcher.search(query, null, 1000).scoreDocs;
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexFileDeleter.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
> Sun Apr 11 11:31:09 2010
> @@ -138,11 +138,11 @@ public class TestIndexFileDeleter extend
>     copyFile(dir, "_0.cfs", "deletable");
>
>     // Create some old segments file:
> -    copyFile(dir, "segments_3", "segments");
> -    copyFile(dir, "segments_3", "segments_2");
> +    copyFile(dir, "segments_2", "segments");
> +    copyFile(dir, "segments_2", "segments_1");
>
>     // Create a bogus cfs file shadowing a non-cfs segment:
> -    copyFile(dir, "_2.cfs", "_3.cfs");
> +    copyFile(dir, "_1.cfs", "_2.cfs");
>
>     String[] filesPre = dir.listAll();
>
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReader.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReader.java
> Sun Apr 11 11:31:09 2010
> @@ -466,18 +466,17 @@ public class TestIndexReader extends Luc
>     public void testLockObtainFailed() throws IOException {
>         Directory dir = new RAMDirectory();
>
> -        IndexWriter writer = null;
> -        IndexReader reader = null;
>         Term searchTerm = new Term("content", "aaa");
>
>         //  add 11 documents with term : aaa
> -        writer  = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> +        IndexWriter writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> +        writer.commit();
>         for (int i = 0; i < 11; i++) {
>             addDoc(writer, searchTerm.text());
>         }
>
>         // Create reader:
> -        reader = IndexReader.open(dir, false);
> +        IndexReader reader = IndexReader.open(dir, false);
>
>         // Try to make changes
>         try {
> @@ -1749,6 +1748,7 @@ public class TestIndexReader extends Luc
>     Directory dir = new MockRAMDirectory();
>     IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
>         TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> +    writer.commit();
>     Document doc = new Document();
>     writer.addDocument(doc);
>     IndexReader r = IndexReader.open(dir, true);
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexReaderReopen.java
> Sun Apr 11 11:31:09 2010
> @@ -174,6 +174,7 @@ public class TestIndexReaderReopen exten
>     IndexWriter iwriter = new IndexWriter(dir, new IndexWriterConfig(
>         TEST_VERSION_CURRENT, new KeywordAnalyzer()).setOpenMode(
>         OpenMode.CREATE).setMergeScheduler(new SerialMergeScheduler()));
> +    iwriter.commit();
>     IndexReader reader = IndexReader.open(dir, false);
>     try {
>       int M = 3;
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriter.java
> Sun Apr 11 11:31:09 2010
> @@ -778,7 +778,7 @@ public class TestIndexWriter extends Luc
>         writer.close();
>
>         long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -        assertTrue("segment generation should be > 1 but got " + gen, gen
> > 1);
> +        assertTrue("segment generation should be > 0 but got " + gen, gen
> > 0);
>
>         // Make the next segments file, with last byte
>         // missing, to simulate a writer that crashed while
> @@ -838,7 +838,7 @@ public class TestIndexWriter extends Luc
>         writer.close();
>
>         long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -        assertTrue("segment generation should be > 1 but got " + gen, gen
> > 1);
> +        assertTrue("segment generation should be > 0 but got " + gen, gen
> > 0);
>
>         String fileNameIn = SegmentInfos.getCurrentSegmentFileName(dir);
>         String fileNameOut =
> IndexFileNames.fileNameFromGeneration(IndexFileNames.SEGMENTS,
> @@ -903,7 +903,7 @@ public class TestIndexWriter extends Luc
>         writer.close();
>
>         long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -        assertTrue("segment generation should be > 1 but got " + gen, gen
> > 1);
> +        assertTrue("segment generation should be > 0 but got " + gen, gen
> > 0);
>
>         String[] files = dir.listAll();
>         for(int i=0;i<files.length;i++) {
> @@ -2326,7 +2326,7 @@ public class TestIndexWriter extends Luc
>   public void testImmediateDiskFull() throws IOException {
>     MockRAMDirectory dir = new MockRAMDirectory();
>     IndexWriter writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(2));
> -    dir.setMaxSizeInBytes(dir.getRecomputedActualSizeInBytes());
> +    dir.setMaxSizeInBytes(Math.max(1,
> dir.getRecomputedActualSizeInBytes()));
>     final Document doc = new Document();
>     doc.add(new Field("field", "aaa bbb ccc ddd eee fff ggg hhh iii jjj",
> Field.Store.YES, Field.Index.ANALYZED,
> Field.TermVector.WITH_POSITIONS_OFFSETS));
>     try {
> @@ -2644,7 +2644,7 @@ public class TestIndexWriter extends Luc
>     writer.close();
>
>     long gen = SegmentInfos.getCurrentSegmentGeneration(dir);
> -    assertTrue("segment generation should be > 1 but got " + gen, gen >
> 1);
> +    assertTrue("segment generation should be > 0 but got " + gen, gen >
> 0);
>
>     final String segmentsFileName =
> SegmentInfos.getCurrentSegmentFileName(dir);
>     IndexInput in = dir.openInput(segmentsFileName);
> @@ -2673,7 +2673,8 @@ public class TestIndexWriter extends Luc
>         TEST_VERSION_CURRENT, new WhitespaceAnalyzer(TEST_VERSION_CURRENT))
>         .setMaxBufferedDocs(2));
>     ((LogMergePolicy)
> writer.getConfig().getMergePolicy()).setMergeFactor(5);
> -
> +    writer.commit();
> +
>     for (int i = 0; i < 23; i++)
>       addDoc(writer);
>
> @@ -3534,7 +3535,8 @@ public class TestIndexWriter extends Luc
>
>     IndexWriter writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(2));
>     ((LogMergePolicy)
> writer.getConfig().getMergePolicy()).setMergeFactor(5);
> -
> +    writer.commit();
> +
>     for (int i = 0; i < 23; i++)
>       addDoc(writer);
>
> @@ -3585,7 +3587,8 @@ public class TestIndexWriter extends Luc
>
>     IndexWriter writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setMaxBufferedDocs(2));
>     ((LogMergePolicy)
> writer.getConfig().getMergePolicy()).setMergeFactor(5);
> -
> +    writer.commit();
> +
>     for (int i = 0; i < 23; i++)
>       addDoc(writer);
>
> @@ -3670,6 +3673,7 @@ public class TestIndexWriter extends Luc
>
>       dir2 = new MockRAMDirectory();
>       writer2 = new IndexWriter(dir2, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> +      writer2.commit();
>       cms = (ConcurrentMergeScheduler)
> writer2.getConfig().getMergeScheduler();
>
>       readers = new IndexReader[NUM_COPY];
> @@ -4952,4 +4956,17 @@ public class TestIndexWriter extends Luc
>     w.close();
>     dir.close();
>   }
> +
> +  public void testNoCommits() throws Exception {
> +    // Tests that if we don't call commit(), the directory has 0 commits.
> This has
> +    // changed since LUCENE-2386, where before IW would always commit on a
> fresh
> +    // new index.
> +    Directory dir = new RAMDirectory();
> +    IndexWriter writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> +    assertEquals("expected 0 commits!", 0,
> IndexReader.listCommits(dir).size());
> +    // No changes still should generate a commit, because it's a new
> index.
> +    writer.close();
> +    assertEquals("expected 1 commits!", 1,
> IndexReader.listCommits(dir).size());
> +  }
> +
>  }
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterDelete.java
> Sun Apr 11 11:31:09 2010
> @@ -749,7 +749,7 @@ public class TestIndexWriterDelete exten
>
>     MockRAMDirectory dir = new MockRAMDirectory();
>     IndexWriter modifier = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> -
> +    modifier.commit();
>     dir.failOn(failure.reset());
>
>     for (int i = 0; i < keywords.length; i++) {
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterExceptions.java
> Sun Apr 11 11:31:09 2010
> @@ -134,6 +134,7 @@ public class TestIndexWriterExceptions e
>     MockIndexWriter writer  = new MockIndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setRAMBufferSizeMB(0.1));
>     ((ConcurrentMergeScheduler)
> writer.getConfig().getMergeScheduler()).setSuppressExceptions();
>     //writer.setMaxBufferedDocs(10);
> +    writer.commit();
>
>     if (VERBOSE)
>       writer.setInfoStream(System.out);
> @@ -171,6 +172,7 @@ public class TestIndexWriterExceptions e
>     MockIndexWriter writer  = new MockIndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setRAMBufferSizeMB(0.2));
>     ((ConcurrentMergeScheduler)
> writer.getConfig().getMergeScheduler()).setSuppressExceptions();
>     //writer.setMaxBufferedDocs(10);
> +    writer.commit();
>
>     if (VERBOSE)
>       writer.setInfoStream(System.out);
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestIndexWriterReader.java
> Sun Apr 11 11:31:09 2010
> @@ -561,6 +561,7 @@ public class TestIndexWriterReader exten
>   public void testAfterCommit() throws Exception {
>     Directory dir1 = new MockRAMDirectory();
>     IndexWriter writer = new IndexWriter(dir1, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> +    writer.commit();
>     writer.setInfoStream(infoStream);
>
>     // create the index
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java
> Sun Apr 11 11:31:09 2010
> @@ -82,10 +82,7 @@ public class TestNoDeletionPolicy extend
>       doc.add(new Field("c", "a" + i, Store.YES, Index.ANALYZED));
>       writer.addDocument(doc);
>       writer.commit();
> -      // the reason to expect i + 2 commits is because when IndexWriter is
> -      // created it creates a first commit. If this ever changes, then the
> -      // expected should be i + 1 (and this comment removed).
> -      assertEquals("wrong number of commits !", i + 2,
> IndexReader.listCommits(dir).size());
> +      assertEquals("wrong number of commits !", i + 1,
> IndexReader.listCommits(dir).size());
>     }
>     writer.close();
>   }
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing.java
> Sun Apr 11 11:31:09 2010
> @@ -122,7 +122,8 @@ public class TestStressIndexing extends
>         TEST_VERSION_CURRENT, new SimpleAnalyzer(TEST_VERSION_CURRENT))
>
> .setOpenMode(OpenMode.CREATE).setMaxBufferedDocs(10).setMergeScheduler(
>             mergeScheduler));
> -
> +    modifier.commit();
> +
>     TimedThread[] threads = new TimedThread[4];
>     int numThread = 0;
>
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing2.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing2.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing2.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/index/TestStressIndexing2.java
> Sun Apr 11 11:31:09 2010
> @@ -150,6 +150,7 @@ public class TestStressIndexing2 extends
>     IndexWriter w = new MockIndexWriter(dir, new IndexWriterConfig(
>         TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)).setOpenMode(OpenMode.CREATE).setRAMBufferSizeMB(
>         0.1).setMaxBufferedDocs(maxBufferedDocs));
> +    w.commit();
>     LogMergePolicy lmp = (LogMergePolicy) w.getConfig().getMergePolicy();
>     lmp.setUseCompoundFile(false);
>     lmp.setUseCompoundDocStore(false);
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
> Sun Apr 11 11:31:09 2010
> @@ -243,6 +243,7 @@ public class TestBufferedIndexInput exte
>
>     public void testSetBufferSize() throws IOException {
>       File indexDir = new File(TEMP_DIR, "testSetBufferSize");
> +      indexDir.mkdirs(); // required for this MockFSDir since we don't
> commit on IW creation anymore.
>       MockFSDirectory dir = new MockFSDirectory(indexDir, newRandom());
>       try {
>         IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestLockFactory.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestLockFactory.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestLockFactory.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestLockFactory.java
> Sun Apr 11 11:31:09 2010
> @@ -82,7 +82,7 @@ public class TestLockFactory extends Luc
>                    NoLockFactory.class.isInstance(dir.getLockFactory()));
>
>         IndexWriter writer = new IndexWriter(dir, new
> IndexWriterConfig(TEST_VERSION_CURRENT, new
> WhitespaceAnalyzer(TEST_VERSION_CURRENT)));
> -
> +        writer.commit(); // required so the second open succeed
>         // Create a 2nd IndexWriter.  This is normally not allowed but it
> should run through since we're not
>         // using any locks:
>         IndexWriter writer2 = null;
>
> Modified:
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestWindowsMMap.java
> URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestWindowsMMap.java?rev=932868&r1=932867&r2=932868&view=diff
>
> ==============================================================================
> ---
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestWindowsMMap.java
> (original)
> +++
> lucene/dev/trunk/lucene/src/test/org/apache/lucene/store/TestWindowsMMap.java
> Sun Apr 11 11:31:09 2010
> @@ -66,17 +66,22 @@ public class TestWindowsMMap extends Luc
>     new File(TEMP_DIR,"testLuceneMmap").getAbsolutePath();
>
>   public void testMmapIndex() throws Exception {
> -    FSDirectory storeDirectory;
> -    storeDirectory = new MMapDirectory(new File(storePathname), null);
> -
> +    // sometimes the directory is not cleaned by rmDir, because on Windows
> it
> +    // may take some time until the files are finally dereferenced. So
> clean the
> +    // directory up front, or otherwise new IndexWriter will fail.
> +    File dirPath = new File(storePathname);
> +    rmDir(dirPath);
> +    MMapDirectory dir = new MMapDirectory(dirPath, null);
> +
>     // plan to add a set of useful stopwords, consider changing some of the
>     // interior filters.
>     StandardAnalyzer analyzer = new StandardAnalyzer(TEST_VERSION_CURRENT,
> Collections.emptySet());
>     // TODO: something about lock timeouts and leftover locks.
> -    IndexWriter writer = new IndexWriter(storeDirectory, new
> IndexWriterConfig(
> +    IndexWriter writer = new IndexWriter(dir, new IndexWriterConfig(
>         TEST_VERSION_CURRENT, analyzer)
>         .setOpenMode(OpenMode.CREATE));
> -    IndexSearcher searcher = new IndexSearcher(storeDirectory, true);
> +    writer.commit();
> +    IndexSearcher searcher = new IndexSearcher(dir, true);
>
>     for(int dx = 0; dx < 1000; dx ++) {
>       String f = randomField();
> @@ -87,14 +92,16 @@ public class TestWindowsMMap extends Luc
>
>     searcher.close();
>     writer.close();
> -                rmDir(new File(storePathname));
> +    rmDir(dirPath);
>   }
>
> -        private void rmDir(File dir) {
> -          File[] files = dir.listFiles();
> -          for (int i = 0; i < files.length; i++) {
> -            files[i].delete();
> -          }
> -          dir.delete();
> -        }
> +  private void rmDir(File dir) {
> +    if (!dir.exists()) {
> +      return;
> +    }
> +    for (File file : dir.listFiles()) {
> +      file.delete();
> +    }
> +    dir.delete();
> +  }
>  }
>
>
>