Index: lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java =================================================================== --- lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java (revision 1392825) +++ lucene/test-framework/src/java/org/apache/lucene/store/MockDirectoryWrapper.java (working copy) @@ -204,10 +204,11 @@ // first force-close all files, so we can corrupt on windows etc. // clone the file map, as these guys want to remove themselves on close. Map m = new IdentityHashMap(openFileHandles); - for (Closeable f : m.keySet()) + for (Closeable f : m.keySet()) { try { f.close(); } catch (Exception ignored) {} + } while(it.hasNext()) { String name = it.next(); @@ -577,8 +578,8 @@ if (assertNoUnreferencedFilesOnClose) { // now look for unreferenced files: String[] startFiles = listAll(); - new IndexWriter(this, new IndexWriterConfig(LuceneTestCase.TEST_VERSION_CURRENT, null)).rollback(); - String[] endFiles = listAll(); + new IndexWriter(delegate, new IndexWriterConfig(LuceneTestCase.TEST_VERSION_CURRENT, null)).rollback(); + String[] endFiles = delegate.listAll(); Arrays.sort(startFiles); Arrays.sort(endFiles); Index: lucene/core/src/java/org/apache/lucene/index/SegmentInfoPerCommit.java =================================================================== --- lucene/core/src/java/org/apache/lucene/index/SegmentInfoPerCommit.java (revision 1392825) +++ lucene/core/src/java/org/apache/lucene/index/SegmentInfoPerCommit.java (working copy) @@ -79,6 +79,7 @@ /** Returns all files in use by this segment. */ public Collection files() throws IOException { + // Start from the wrapped info's files: Collection files = new HashSet(info.files()); // Must separately add any live docs files: Index: lucene/core/src/java/org/apache/lucene/index/IndexWriter.java =================================================================== --- lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (revision 1392825) +++ lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (working copy) @@ -3136,6 +3136,11 @@ } } + if (dropSegment) { + assert !segmentInfos.contains(merge.info); + deleter.deleteNewFiles(merge.info.files()); + } + // Must close before checkpoint, otherwise IFD won't be // able to delete the held-open files from the merge // readers: Index: lucene/core/src/test/org/apache/lucene/index/TestRollingUpdates.java =================================================================== --- lucene/core/src/test/org/apache/lucene/index/TestRollingUpdates.java (revision 1392825) +++ lucene/core/src/test/org/apache/lucene/index/TestRollingUpdates.java (working copy) @@ -39,7 +39,6 @@ public void testRollingUpdates() throws Exception { Random random = new Random(random().nextLong()); final BaseDirectoryWrapper dir = newDirectory(); - dir.setCheckIndexOnClose(false); // we use a custom codec provider final LineFileDocs docs = new LineFileDocs(random, true); //provider.register(new MemoryCodec()); @@ -130,10 +129,11 @@ assertEquals(SIZE, w.numDocs()); w.close(); + + TestIndexWriter.assertNoUnreferencedFiles(dir, "leftover files after rolling updates"); + docs.close(); - _TestUtil.checkIndex(dir); - // LUCENE-4455: SegmentInfos infos = new SegmentInfos(); infos.read(dir);