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/01/29 13:43:38 UTC

svn commit: r1237266 - in /lucene/dev/branches/lucene3661/lucene/src: java/org/apache/lucene/codecs/Codec.java java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java test-framework/java/org/apache/lucene/codecs/preflexrw/PreFlexRWCodec.java

Author: rmuir
Date: Sun Jan 29 12:43:37 2012
New Revision: 1237266

URL: http://svn.apache.org/viewvc?rev=1237266&view=rev
Log:
LUCENE-3728: PreFlex codec privately handles old CFS-without-CFE in files()

Modified:
    lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/Codec.java
    lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java
    lucene/dev/branches/lucene3661/lucene/src/test-framework/java/org/apache/lucene/codecs/preflexrw/PreFlexRWCodec.java

Modified: lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/Codec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/Codec.java?rev=1237266&r1=1237265&r2=1237266&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/Codec.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/Codec.java Sun Jan 29 12:43:37 2012
@@ -23,8 +23,6 @@ import java.util.Set;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.util.NamedSPILoader;
-import org.apache.lucene.util.StringHelper;
-import org.apache.lucene.store.CompoundFileDirectory;
 import org.apache.lucene.store.Directory;
 
 /**
@@ -52,11 +50,7 @@ public abstract class Codec implements N
   public void files(Directory dir, SegmentInfo info, Set<String> files) throws IOException {
     if (info.getUseCompoundFile()) {
       files.add(IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_EXTENSION));
-      // nocommit: get this out of here: 3.x codec should override this
-      String version = info.getVersion();
-      if (version != null && StringHelper.getVersionComparator().compare("4.0", version) <= 0) {
-        files.add(IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_ENTRIES_EXTENSION));
-      }
+      files.add(IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_ENTRIES_EXTENSION));
     } else {
       postingsFormat().files(dir, info, "", files);
       storedFieldsFormat().files(dir, info, files);

Modified: lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java?rev=1237266&r1=1237265&r2=1237266&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/java/org/apache/lucene/codecs/lucene3x/Lucene3xCodec.java Sun Jan 29 12:43:37 2012
@@ -34,12 +34,14 @@ import org.apache.lucene.codecs.StoredFi
 import org.apache.lucene.codecs.TermVectorsFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40LiveDocsFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat;
+import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.PerDocWriteState;
 import org.apache.lucene.index.SegmentInfo;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.util.MutableBits;
+import org.apache.lucene.util.StringHelper;
 
 /**
  * Supports the Lucene 3.x index format (readonly)
@@ -130,4 +132,16 @@ public class Lucene3xCodec extends Codec
   public LiveDocsFormat liveDocsFormat() {
     return liveDocsFormat;
   }
+  
+  // overrides the default implementation in codec.java to handle CFS without CFE, and shared docstores
+  @Override
+  public void files(Directory dir, SegmentInfo info, Set<String> files) throws IOException {
+    // TODO: shared doc stores
+    if (info.getUseCompoundFile()) {
+      files.add(IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_EXTENSION));
+      // NOTE: we don't add the CFE extension: because 3.x format doesn't use it.
+    } else {
+      super.files(dir, info, files);
+    }
+  }
 }

Modified: lucene/dev/branches/lucene3661/lucene/src/test-framework/java/org/apache/lucene/codecs/preflexrw/PreFlexRWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene3661/lucene/src/test-framework/java/org/apache/lucene/codecs/preflexrw/PreFlexRWCodec.java?rev=1237266&r1=1237265&r2=1237266&view=diff
==============================================================================
--- lucene/dev/branches/lucene3661/lucene/src/test-framework/java/org/apache/lucene/codecs/preflexrw/PreFlexRWCodec.java (original)
+++ lucene/dev/branches/lucene3661/lucene/src/test-framework/java/org/apache/lucene/codecs/preflexrw/PreFlexRWCodec.java Sun Jan 29 12:43:37 2012
@@ -17,6 +17,9 @@ package org.apache.lucene.codecs.preflex
  * limitations under the License.
  */
 
+import java.io.IOException;
+import java.util.Set;
+
 import org.apache.lucene.codecs.FieldInfosFormat;
 import org.apache.lucene.codecs.LiveDocsFormat;
 import org.apache.lucene.codecs.NormsFormat;
@@ -27,7 +30,11 @@ import org.apache.lucene.codecs.TermVect
 import org.apache.lucene.codecs.lucene3x.Lucene3xCodec;
 import org.apache.lucene.codecs.lucene40.Lucene40LiveDocsFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util.StringHelper;
 
 /**
  * Writes 3.x-like indexes (not perfect emulation yet) for testing only!
@@ -106,4 +113,20 @@ public class PreFlexRWCodec extends Luce
       return super.storedFieldsFormat();
     }
   }
+
+  @Override
+  public void files(Directory dir, SegmentInfo info, Set<String> files) throws IOException {
+    if (info.getUseCompoundFile() && LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE) {
+      // because we don't fully emulate 3.x codec, PreFlexRW actually writes 4.x format CFS files.
+      // so we must check segment version here to see if its a "real" 3.x segment or a "fake"
+      // one that we wrote with a 4.x-format CFS+CFE
+      files.add(IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_EXTENSION));
+      String version = info.getVersion();
+      if (version != null && StringHelper.getVersionComparator().compare("4.0", version) <= 0) {
+        files.add(IndexFileNames.segmentFileName(info.name, "", IndexFileNames.COMPOUND_FILE_ENTRIES_EXTENSION));
+      }
+    } else {
+      super.files(dir, info, files);
+    }
+  }
 }