You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2012/10/02 14:36:03 UTC

svn commit: r1392890 - in /lucene/dev/branches/lucene4456/lucene/core/src: java/org/apache/lucene/index/IndexFileDeleter.java test/org/apache/lucene/index/TestIndexWriter.java test/org/apache/lucene/index/TestNoDeletionPolicy.java

Author: mikemccand
Date: Tue Oct  2 12:36:02 2012
New Revision: 1392890

URL: http://svn.apache.org/viewvc?rev=1392890&view=rev
Log:
LUCENE-4456: in IFD.refresh() do not delete files that do not match IndexFileNames; fix a couple more test cases

Modified:
    lucene/dev/branches/lucene4456/lucene/core/src/java/org/apache/lucene/index/IndexFileDeleter.java
    lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
    lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java

Modified: lucene/dev/branches/lucene4456/lucene/core/src/java/org/apache/lucene/index/IndexFileDeleter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4456/lucene/core/src/java/org/apache/lucene/index/IndexFileDeleter.java?rev=1392890&r1=1392889&r2=1392890&view=diff
==============================================================================
--- lucene/dev/branches/lucene4456/lucene/core/src/java/org/apache/lucene/index/IndexFileDeleter.java (original)
+++ lucene/dev/branches/lucene4456/lucene/core/src/java/org/apache/lucene/index/IndexFileDeleter.java Tue Oct  2 12:36:02 2012
@@ -333,12 +333,16 @@ final class IndexFileDeleter {
       segmentPrefix2 = null;
     }
 
+    Matcher m = IndexFileNames.CODEC_FILE_PATTERN.matcher("");
+
     for(int i=0;i<files.length;i++) {
       String fileName = files[i];
+      m.reset(fileName);
       if ((segmentName == null || fileName.startsWith(segmentPrefix1) || fileName.startsWith(segmentPrefix2)) &&
           !fileName.endsWith("write.lock") &&
           !refCounts.containsKey(fileName) &&
-          !fileName.equals(IndexFileNames.SEGMENTS_GEN)) {
+          !fileName.equals(IndexFileNames.SEGMENTS_GEN) &&
+          (m.matches() || fileName.startsWith(IndexFileNames.SEGMENTS))) {
         // Unreferenced file, so remove it
         if (infoStream.isEnabled("IFD")) {
           infoStream.message("IFD", "refresh [prefix=" + segmentName + "]: removing newly created unreferenced file \"" + fileName + "\"");

Modified: lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java?rev=1392890&r1=1392889&r2=1392890&view=diff
==============================================================================
--- lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java (original)
+++ lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java Tue Oct  2 12:36:02 2012
@@ -168,6 +168,12 @@ public class TestIndexWriter extends Luc
     public void testCreateWithReader() throws IOException {
       Directory dir = newDirectory();
 
+      if (dir instanceof MockDirectoryWrapper) {
+        // We create leftover files, because the 2nd writer
+        // can't remove the files held open by thef irst reader:
+        ((MockDirectoryWrapper) dir).setAssertNoUnrefencedFilesOnClose(false);
+      }
+
       // add one document & close writer
       IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig( TEST_VERSION_CURRENT, new MockAnalyzer(random())));
       addDoc(writer);

Modified: lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java?rev=1392890&r1=1392889&r2=1392890&view=diff
==============================================================================
--- lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java (original)
+++ lucene/dev/branches/lucene4456/lucene/core/src/test/org/apache/lucene/index/TestNoDeletionPolicy.java Tue Oct  2 12:36:02 2012
@@ -21,10 +21,12 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.util.Arrays;
+
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.document.Document;
 import org.apache.lucene.document.Field;
 import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.util.LuceneTestCase;
 import org.junit.Test;
 
@@ -68,6 +70,10 @@ public class TestNoDeletionPolicy extend
   @Test
   public void testAllCommitsRemain() throws Exception {
     Directory dir = newDirectory();
+    if (dir instanceof MockDirectoryWrapper) {
+      // We create multiple commit points:
+      ((MockDirectoryWrapper) dir).setAssertNoUnrefencedFilesOnClose(false);
+    }
     IndexWriter writer = new IndexWriter(dir, newIndexWriterConfig(
         TEST_VERSION_CURRENT, new MockAnalyzer(random()))
         .setIndexDeletionPolicy(NoDeletionPolicy.INSTANCE));