You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2012/08/30 23:51:12 UTC

svn commit: r1379175 - in /lucene/dev/branches/branch_4x/lucene: ./ core/src/java/org/apache/lucene/codecs/lucene3x/ core/src/java/org/apache/lucene/index/ core/src/test/org/apache/lucene/index/ test-framework/src/java/org/apache/lucene/codecs/lucene3x/

Author: rmuir
Date: Thu Aug 30 21:51:11 2012
New Revision: 1379175

URL: http://svn.apache.org/viewvc?rev=1379175&view=rev
Log:
LUCENE-4339: allow deletes against 3.x segments

Modified:
    lucene/dev/branches/branch_4x/lucene/CHANGES.txt
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java
    lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
    lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
    lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWCodec.java

Modified: lucene/dev/branches/branch_4x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/CHANGES.txt?rev=1379175&r1=1379174&r2=1379175&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/lucene/CHANGES.txt Thu Aug 30 21:51:11 2012
@@ -23,6 +23,11 @@ New Features
 * LUCENE-4323: Added support for an absolute maximum CFS segment size
   (in MiB) to LogMergePolicy and TieredMergePolicy.
   (Alexey Lef via Uwe Schindler)
+  
+* LUCENE-4339: Allow deletes against 3.x segments for easier upgrading.
+  Lucene3x Codec is still otherwise read-only, you should not set it
+  as the default Codec on IndexWriter, because it cannot write new segments.
+  (Mike McCandless, Robert Muir)
 
 API Changes
 

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java?rev=1379175&r1=1379174&r2=1379175&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java Thu Aug 30 21:51:11 2012
@@ -68,12 +68,7 @@ public class Lucene3xCodec extends Codec
   static final String COMPOUND_FILE_STORE_EXTENSION = "cfx";
   
   // TODO: this should really be a different impl
-  private final LiveDocsFormat liveDocsFormat = new Lucene40LiveDocsFormat() {
-    @Override
-    public void writeLiveDocs(MutableBits bits, Directory dir, SegmentInfoPerCommit info, int newDelCount, IOContext context) throws IOException {
-      throw new UnsupportedOperationException("this codec can only be used for reading");
-    }
-  };
+  private final LiveDocsFormat liveDocsFormat = new Lucene40LiveDocsFormat();
   
   // 3.x doesn't support docvalues
   private final DocValuesFormat docValuesFormat = new DocValuesFormat() {

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1379175&r1=1379174&r2=1379175&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java Thu Aug 30 21:51:11 2012
@@ -380,12 +380,13 @@ public final class SegmentInfos implemen
 
           if (!segmentWasUpgraded(directory, si)) {
 
+            String markerFileName = IndexFileNames.segmentFileName(si.name, "upgraded", Lucene3xSegmentInfoFormat.UPGRADED_SI_EXTENSION);
+            si.addFile(markerFileName);
+
             final String segmentFileName = write3xInfo(directory, si, IOContext.DEFAULT);
             upgradedSIFiles.add(segmentFileName);
             directory.sync(Collections.singletonList(segmentFileName));
 
-            String markerFileName = IndexFileNames.segmentFileName(si.name, "upgraded", Lucene3xSegmentInfoFormat.UPGRADED_SI_EXTENSION);
-
             // Write separate marker file indicating upgrade
             // is completed.  This way, if there is a JVM
             // kill/crash, OS crash, power loss, etc. while

Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1379175&r1=1379174&r2=1379175&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Thu Aug 30 21:51:11 2012
@@ -302,6 +302,51 @@ public class TestBackwardsCompatibility 
     }
   }
 
+  /** @deprecated 3.x transition mechanism */
+  @Deprecated
+  public void testDeleteOldIndex() throws IOException {
+    for (String name : oldNames) {
+      if (VERBOSE) {
+        System.out.println("TEST: oldName=" + name);
+      }
+      
+      // Try one delete:
+      Directory dir = newDirectory(oldIndexDirs.get(name));
+
+      IndexReader ir = DirectoryReader.open(dir);       
+      assertEquals(35, ir.numDocs());
+      ir.close();
+
+      IndexWriter iw = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, null));
+      iw.deleteDocuments(new Term("id", "3"));
+      iw.close();
+
+      ir = DirectoryReader.open(dir);
+      assertEquals(34, ir.numDocs());
+      ir.close();
+
+      // Delete all but 1 document:
+      iw = new IndexWriter(dir, new IndexWriterConfig(TEST_VERSION_CURRENT, null));
+      for(int i=0;i<35;i++) {
+        iw.deleteDocuments(new Term("id", ""+i));
+      }
+
+      // Verify NRT reader takes:
+      ir = DirectoryReader.open(iw, true);
+      iw.close();
+      
+      assertEquals("index " + name, 1, ir.numDocs());
+      ir.close();
+
+      // Verify non-NRT reader takes:
+      ir = DirectoryReader.open(dir);
+      assertEquals("index " + name, 1, ir.numDocs());
+      ir.close();
+
+      dir.close();
+    }
+  }
+
   private void doTestHits(ScoreDoc[] hits, int expectedCount, IndexReader reader) throws IOException {
     final int hitCount = hits.length;
     assertEquals("wrong number of hits", expectedCount, hitCount);

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWCodec.java?rev=1379175&r1=1379174&r2=1379175&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWCodec.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWCodec.java Thu Aug 30 21:51:11 2012
@@ -38,8 +38,6 @@ public class PreFlexRWCodec extends Luce
   private final TermVectorsFormat termVectors = new PreFlexRWTermVectorsFormat();
   private final SegmentInfoFormat segmentInfos = new PreFlexRWSegmentInfoFormat();
   private final StoredFieldsFormat storedFields = new PreFlexRWStoredFieldsFormat();
-  // TODO: this should really be a different impl
-  private final LiveDocsFormat liveDocs = new Lucene40LiveDocsFormat();
   
   @Override
   public PostingsFormat postingsFormat() {
@@ -87,15 +85,6 @@ public class PreFlexRWCodec extends Luce
   }
 
   @Override
-  public LiveDocsFormat liveDocsFormat() {
-    if (LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE) {
-      return liveDocs;
-    } else {
-      return super.liveDocsFormat();
-    }
-  }
-
-  @Override
   public StoredFieldsFormat storedFieldsFormat() {
     if (LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE) {
       return storedFields;