Index: lucene/contrib/CHANGES.txt =================================================================== --- lucene/contrib/CHANGES.txt (revision 1133480) +++ lucene/contrib/CHANGES.txt (working copy) @@ -79,6 +79,12 @@ First/SecondPassGroupingCollector. (Martijn van Groningen, Mike McCandless) +Bug Fixes + + * LUCENE-3185: Fix bug in NRTCachingDirectory.deleteFile that would + always throw exception and sometimes fail to actually delete the + file. (Mike McCandless) + Build * LUCENE-3149: Upgrade contrib/icu's ICU jar file to ICU 4.8. Index: lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java =================================================================== --- lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java (revision 1133480) +++ lucene/contrib/misc/src/test/org/apache/lucene/store/TestNRTCachingDirectory.java (working copy) @@ -111,4 +111,12 @@ conf.setMergeScheduler(cachedFSDir.getMergeScheduler()); IndexWriter writer = new IndexWriter(cachedFSDir, conf); } + + public void testDeleteFile() throws Exception { + Directory dir = new NRTCachingDirectory(newDirectory(), 2.0, 25.0); + dir.createOutput("foo.txt").close(); + dir.deleteFile("foo.txt"); + assertEquals(0, dir.listAll().length); + dir.close(); + } } Index: lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java =================================================================== --- lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java (revision 1133480) +++ lucene/contrib/misc/src/java/org/apache/lucene/store/NRTCachingDirectory.java (working copy) @@ -136,12 +136,15 @@ @Override public synchronized void deleteFile(String name) throws IOException { - // Delete from both, in case we are currently uncaching: if (VERBOSE) { System.out.println("nrtdir.deleteFile name=" + name); } - cache.deleteFile(name); - delegate.deleteFile(name); + if (cache.fileExists(name)) { + assert !delegate.fileExists(name); + cache.deleteFile(name); + } else { + delegate.deleteFile(name); + } } @Override