Index: lucene/core/src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (revision 1539143) +++ lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -394,6 +394,7 @@ } // Done: finish the full flush! docWriter.finishFullFlush(success); + processEvents(false, true); doAfterFlush(); } } @@ -929,6 +930,7 @@ closeInternal(waitForMerges, true); } } + assert eventQueue.isEmpty(); } } @@ -1061,6 +1063,7 @@ } // finally, restore interrupt status: if (interrupted) Thread.currentThread().interrupt(); + processEvents(false, true); } } @@ -2020,6 +2023,7 @@ rollbackInternal(); } } + assert eventQueue.isEmpty() : eventQueue; } private void rollbackInternal() throws IOException { Index: lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java =================================================================== --- lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java (revision 1539143) +++ lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java (working copy) @@ -1321,6 +1321,7 @@ dir.close(); } + public void testDeleteUnusedFiles() throws Exception { for(int iter=0;iter<2;iter++) { Directory dir = newMockDirectory(); // relies on windows semantics @@ -1350,7 +1351,19 @@ } List files = Arrays.asList(dir.listAll()); + assertTrue(files.contains("_0.cfs")); + assertTrue(files.contains("_0.cfe")); + assertTrue(files.contains("_0.si")); + if (iter == 1) { + // we run a full commit so there should be a segments file etc. + assertTrue(files.contains("segments_1")); + assertTrue(files.contains("segments.gen")); + assertEquals(files.toString(), files.size(), 5); + } else { + // this is an NRT reopen - no segments files yet + assertEquals(files.toString(), files.size(), 3); + } w.addDocument(doc); w.forceMerge(1); if (iter == 1) {