Index: src/test/org/apache/lucene/index/TestIndexReader.java =================================================================== --- src/test/org/apache/lucene/index/TestIndexReader.java (revision 730550) +++ src/test/org/apache/lucene/index/TestIndexReader.java (working copy) @@ -1558,4 +1558,35 @@ // expected } } + + // LUCENE-1509 + public void testNoDupCommitFileNames() throws Throwable { + + Directory dir = new MockRAMDirectory(); + + IndexWriter writer = new IndexWriter(dir, new StandardAnalyzer(), + IndexWriter.MaxFieldLength.LIMITED); + + writer.setMaxBufferedDocs(2); + writer.addDocument(createDocument("a")); + writer.addDocument(createDocument("a")); + writer.addDocument(createDocument("a")); + writer.close(); + + Collection commits = IndexReader.listCommits(dir); + Iterator it = commits.iterator(); + while(it.hasNext()) { + IndexCommit commit = (IndexCommit) it.next(); + Collection files = commit.getFileNames(); + HashSet seen = new HashSet(); + Iterator it2 = files.iterator(); + while(it2.hasNext()) { + String fileName = (String) it2.next(); + assertTrue("file " + fileName + " was duplicated", !seen.contains(fileName)); + seen.add(fileName); + } + } + + dir.close(); + } } Index: src/test/org/apache/lucene/index/TestIndexWriter.java =================================================================== --- src/test/org/apache/lucene/index/TestIndexWriter.java (revision 730550) +++ src/test/org/apache/lucene/index/TestIndexWriter.java (working copy) @@ -1164,9 +1164,9 @@ // and it doesn't delete intermediate segments then it // will exceed this 100X: // System.out.println("start " + startDiskUsage + "; mid " + midDiskUsage + ";end " + endDiskUsage); - assertTrue("writer used to much space while adding documents when autoCommit=false", + assertTrue("writer used too much space while adding documents when autoCommit=false: mid=" + midDiskUsage + " start=" + startDiskUsage + " end=" + endDiskUsage, midDiskUsage < 100*startDiskUsage); - assertTrue("writer used to much space after close when autoCommit=false endDiskUsage=" + endDiskUsage + " startDiskUsage=" + startDiskUsage, + assertTrue("writer used too much space after close when autoCommit=false endDiskUsage=" + endDiskUsage + " startDiskUsage=" + startDiskUsage, endDiskUsage < 100*startDiskUsage); } Index: src/java/org/apache/lucene/index/DirectoryIndexReader.java =================================================================== --- src/java/org/apache/lucene/index/DirectoryIndexReader.java (revision 730550) +++ src/java/org/apache/lucene/index/DirectoryIndexReader.java (working copy) @@ -23,7 +23,8 @@ import java.util.HashSet; import java.util.Collection; import java.util.ArrayList; -import java.util.List; +import java.util.Iterator; +import java.util.Collections; import org.apache.lucene.store.Directory; import org.apache.lucene.store.Lock; @@ -64,12 +65,7 @@ if (!readOnly && segmentInfos != null) { // We assume that this segments_N was previously // properly sync'd: - for(int i=0;i 0) { for(int i=0;i 0) { for(int i=0;i