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 2014/01/22 20:04:15 UTC

svn commit: r1560477 - in /lucene/dev/branches/lucene_solr_4_6: ./ lucene/ lucene/codecs/ lucene/codecs/src/test/org/apache/lucene/codecs/appending/ lucene/core/ lucene/core/src/java/org/apache/lucene/codecs/lucene40/ lucene/core/src/java/org/apache/lu...

Author: rmuir
Date: Wed Jan 22 19:04:14 2014
New Revision: 1560477

URL: http://svn.apache.org/r1560477
Log:
LUCENE-5377: IW.addIndexes(Dir[]) causes silent index corruption

Added:
    lucene/dev/branches/lucene_solr_4_6/lucene/codecs/src/test/org/apache/lucene/codecs/appending/
      - copied from r1560421, lucene/dev/branches/branch_4x/lucene/codecs/src/test/org/apache/lucene/codecs/appending/
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
      - copied unchanged from r1560421, lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
Removed:
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
Modified:
    lucene/dev/branches/lucene_solr_4_6/   (props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/   (props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/codecs/   (props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/core/   (props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40DocValuesFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40StoredFieldsFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40TermVectorsFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestLucene41StoredFieldsFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene42/TestLucene42DocValuesFormat.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java   (contents, props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility3x.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
    lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/   (props changed)
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
    lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/CHANGES.txt Wed Jan 22 19:04:14 2014
@@ -34,6 +34,10 @@ Bug fixes
   preventing wrong term positions for fields that use
   StringTokenStream. (Michael Busch)
 
+* LUCENE-5377: IndexWriter.addIndexes(Directory[]) would cause corruption
+  on Lucene 4.6 if any index segments were Lucene 4.0-4.5.
+  (Littlestar, Mike McCandless, Shai Erera, Robert Muir)
+
 ======================= Lucene 4.6.0 =======================
 
 New Features

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java Wed Jan 22 19:04:14 2014
@@ -67,11 +67,12 @@ import org.apache.lucene.store.DataOutpu
  * 
  * @see SegmentInfos
  * @lucene.experimental
- * @deprecated Only for reading old 4.0-4.5 segments
+ * @deprecated Only for reading old 4.0-4.5 segments, and supporting IndexWriter.addIndexes
  */
 @Deprecated
 public class Lucene40SegmentInfoFormat extends SegmentInfoFormat {
   private final SegmentInfoReader reader = new Lucene40SegmentInfoReader();
+  private final SegmentInfoWriter writer = new Lucene40SegmentInfoWriter();
 
   /** Sole constructor. */
   public Lucene40SegmentInfoFormat() {
@@ -82,9 +83,11 @@ public class Lucene40SegmentInfoFormat e
     return reader;
   }
 
+  // we must unfortunately support write, to allow addIndexes to write a new .si with rewritten filenames:
+  // see LUCENE-5377
   @Override
   public SegmentInfoWriter getSegmentInfoWriter() {
-    throw new UnsupportedOperationException("this codec can only be used for reading");
+    return writer;
   }
 
   /** File extension used to store {@link SegmentInfo}. */

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java Wed Jan 22 19:04:14 2014
@@ -2702,11 +2702,16 @@ public class IndexWriter implements Clos
     // segment name (its own name, if its 3.x, and doc
     // store segment name):
     TrackingDirectoryWrapper trackingDir = new TrackingDirectoryWrapper(directory);
+    final Codec currentCodec = newInfo.getCodec();
     try {
-      newInfo.getCodec().segmentInfoFormat().getSegmentInfoWriter().write(trackingDir, newInfo, fis, context);
+      currentCodec.segmentInfoFormat().getSegmentInfoWriter().write(trackingDir, newInfo, fis, context);
     } catch (UnsupportedOperationException uoe) {
-      // OK: 3x codec cannot write a new SI file;
-      // SegmentInfos will write this on commit
+      if (currentCodec instanceof Lucene3xCodec) {
+        // OK: 3x codec cannot write a new SI file;
+        // SegmentInfos will write this on commit
+      } else {
+        throw uoe;
+      }
     }
 
     final Collection<String> siFiles = trackingDir.getCreatedFiles();

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40DocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40DocValuesFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40DocValuesFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40DocValuesFormat.java Wed Jan 22 19:04:14 2014
@@ -19,12 +19,18 @@ package org.apache.lucene.codecs.lucene4
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.BaseDocValuesFormatTestCase;
+import org.junit.BeforeClass;
 
 /**
  * Tests Lucene40DocValuesFormat
  */
 public class TestLucene40DocValuesFormat extends BaseDocValuesFormatTestCase {
   private final Codec codec = new Lucene40RWCodec();
+  
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
 
   @Override
   protected Codec getCodec() {

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsFormat.java Wed Jan 22 19:04:14 2014
@@ -19,6 +19,7 @@ package org.apache.lucene.codecs.lucene4
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.BasePostingsFormatTestCase;
+import org.junit.BeforeClass;
 
 /**
  * Tests Lucene40PostingsFormat
@@ -26,6 +27,11 @@ import org.apache.lucene.index.BasePosti
 public class TestLucene40PostingsFormat extends BasePostingsFormatTestCase {
   private final Codec codec = new Lucene40Codec();
 
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
+  
   @Override
   protected Codec getCodec() {
     return codec;

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40PostingsReader.java Wed Jan 22 19:04:14 2014
@@ -34,6 +34,7 @@ import org.apache.lucene.index.Term;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util._TestUtil;
+import org.junit.BeforeClass;
 
 public class TestLucene40PostingsReader extends LuceneTestCase {
   static final String terms[] = new String[100];
@@ -42,6 +43,11 @@ public class TestLucene40PostingsReader 
       terms[i] = Integer.toString(i+1);
     }
   }
+  
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
 
   /** tests terms with different probabilities of being in the document.
    *  depends heavily on term vectors cross-check at checkIndex

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40StoredFieldsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40StoredFieldsFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40StoredFieldsFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40StoredFieldsFormat.java Wed Jan 22 19:04:14 2014
@@ -19,9 +19,15 @@ package org.apache.lucene.codecs.lucene4
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.BaseStoredFieldsFormatTestCase;
+import org.junit.BeforeClass;
 
 public class TestLucene40StoredFieldsFormat extends BaseStoredFieldsFormatTestCase {
   
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
+  
   @Override
   protected Codec getCodec() {
     return new Lucene40RWCodec();

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40TermVectorsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40TermVectorsFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40TermVectorsFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestLucene40TermVectorsFormat.java Wed Jan 22 19:04:14 2014
@@ -19,9 +19,15 @@ package org.apache.lucene.codecs.lucene4
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.BaseTermVectorsFormatTestCase;
+import org.junit.BeforeClass;
 
 public class TestLucene40TermVectorsFormat extends BaseTermVectorsFormatTestCase {
 
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
+  
   @Override
   protected Codec getCodec() {
     return new Lucene40RWCodec();

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene40/TestReuseDocsEnum.java Wed Jan 22 19:04:14 2014
@@ -37,10 +37,16 @@ import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.LineFileDocs;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util._TestUtil;
+import org.junit.BeforeClass;
 
 // TODO: really this should be in BaseTestPF or somewhere else? useful test!
 public class TestReuseDocsEnum extends LuceneTestCase {
 
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
+  
   public void testReuseDocsEnumNoReuse() throws IOException {
     Directory dir = newDirectory();
     Codec cp = _TestUtil.alwaysPostingsFormat(new Lucene40RWPostingsFormat());

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestLucene41StoredFieldsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestLucene41StoredFieldsFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestLucene41StoredFieldsFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene41/TestLucene41StoredFieldsFormat.java Wed Jan 22 19:04:14 2014
@@ -19,9 +19,15 @@ package org.apache.lucene.codecs.lucene4
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.BaseStoredFieldsFormatTestCase;
+import org.junit.BeforeClass;
 
 public class TestLucene41StoredFieldsFormat extends BaseStoredFieldsFormatTestCase {
   
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
+  
   @Override
   protected Codec getCodec() {
     return new Lucene41RWCodec();

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene42/TestLucene42DocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene42/TestLucene42DocValuesFormat.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene42/TestLucene42DocValuesFormat.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/codecs/lucene42/TestLucene42DocValuesFormat.java Wed Jan 22 19:04:14 2014
@@ -19,6 +19,7 @@ package org.apache.lucene.codecs.lucene4
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.index.BaseCompressingDocValuesFormatTestCase;
+import org.junit.BeforeClass;
 
 /**
  * Tests Lucene42DocValuesFormat
@@ -26,6 +27,11 @@ import org.apache.lucene.index.BaseCompr
 public class TestLucene42DocValuesFormat extends BaseCompressingDocValuesFormatTestCase {
   private final Codec codec = new Lucene42RWCodec();
 
+  @BeforeClass
+  public static void beforeClass() {
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // explicitly instantiates ancient codec
+  }
+  
   @Override
   protected Codec getCodec() {
     return codec;

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Wed Jan 22 19:04:14 2014
@@ -207,6 +207,8 @@ public class TestBackwardsCompatibility 
 
   @BeforeClass
   public static void beforeClass() throws Exception {
+    assertFalse("test infra is broken!", LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE);
+    assertFalse("test infra is broken!", LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE);
     List<String> names = new ArrayList<String>(oldNames.length + oldSingleSegmentNames.length);
     names.addAll(Arrays.asList(oldNames));
     names.addAll(Arrays.asList(oldSingleSegmentNames));

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility3x.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility3x.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility3x.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestBackwardsCompatibility3x.java Wed Jan 22 19:04:14 2014
@@ -74,7 +74,7 @@ import org.junit.BeforeClass;
 // don't use 3.x codec, its unrealistic since it means
 // we won't even be running the actual code, only the impostor
 // Sep codec cannot yet handle the offsets we add when changing indexes!
-@SuppressCodecs({"Lucene3x", "MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom"})
+@SuppressCodecs({"Lucene3x", "MockFixedIntBlock", "MockVariableIntBlock", "MockSep", "MockRandom", "Lucene40", "Lucene41", "Appending", "Lucene42", "Lucene45"})
 public class TestBackwardsCompatibility3x extends LuceneTestCase {
 
   // Uncomment these cases & run them on an older Lucene
@@ -145,6 +145,8 @@ public class TestBackwardsCompatibility3
   
   @BeforeClass
   public static void beforeClass() throws Exception {
+    assertFalse("test infra is broken!", LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE);
+    assertFalse("test infra is broken!", LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE);
     List<String> names = new ArrayList<String>(oldNames.length + oldSingleSegmentNames.length);
     names.addAll(Arrays.asList(oldNames));
     names.addAll(Arrays.asList(oldSingleSegmentNames));

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/index/TestNumericDocValuesUpdates.java Wed Jan 22 19:04:14 2014
@@ -946,9 +946,11 @@ public class TestNumericDocValuesUpdates
     Codec[] oldCodecs = new Codec[] { new Lucene40RWCodec(), new Lucene41RWCodec(), new Lucene42RWCodec(), new Lucene45RWCodec() };
     Directory dir = newDirectory();
     
+    boolean oldValue = OLD_FORMAT_IMPERSONATION_IS_ACTIVE;
     // create a segment with an old Codec
     IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
     conf.setCodec(oldCodecs[random().nextInt(oldCodecs.length)]);
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
     IndexWriter writer = new IndexWriter(dir, conf);
     Document doc = new Document();
     doc.add(new StringField("id", "doc", Store.NO));
@@ -966,7 +968,7 @@ public class TestNumericDocValuesUpdates
     } catch (UnsupportedOperationException e) {
       writer.rollback(); 
     } finally {
-      OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
+      OLD_FORMAT_IMPERSONATION_IS_ACTIVE = oldValue;
     }
     
     dir.close();

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java Wed Jan 22 19:04:14 2014
@@ -51,6 +51,8 @@ public class TestFileSwitchDirectory ext
     
     FileSwitchDirectory fsd = new FileSwitchDirectory(fileExtensions, primaryDir, secondaryDir, true);
     // for now we wire Lucene40Codec because we rely upon its specific impl
+    boolean oldValue = OLD_FORMAT_IMPERSONATION_IS_ACTIVE;
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
     IndexWriter writer = new IndexWriter(
         fsd,
         new IndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random())).
@@ -82,6 +84,7 @@ public class TestFileSwitchDirectory ext
       assertNotNull(files[i]);
     }
     fsd.close();
+    OLD_FORMAT_IMPERSONATION_IS_ACTIVE = oldValue;
   }
   
   private Directory newFSSwitchDirectory(Set<String> primaryExtensions) throws IOException {

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java Wed Jan 22 19:04:14 2014
@@ -41,17 +41,6 @@ public final class Lucene40RWCodec exten
     }
   };
   
-  private final SegmentInfoFormat infosFormat = new Lucene40SegmentInfoFormat() {
-    @Override
-    public org.apache.lucene.codecs.SegmentInfoWriter getSegmentInfoWriter() {
-      if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
-        return super.getSegmentInfoWriter();
-      } else {
-        return new Lucene40SegmentInfoWriter();
-      }
-    }
-  };
-
   private final DocValuesFormat docValues = new Lucene40RWDocValuesFormat();
   private final NormsFormat norms = new Lucene40RWNormsFormat();
   
@@ -70,9 +59,4 @@ public final class Lucene40RWCodec exten
     return norms;
   }
   
-  @Override
-  public SegmentInfoFormat segmentInfoFormat() {
-    return infosFormat;
-  }
-  
 }

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java Wed Jan 22 19:04:14 2014
@@ -6,14 +6,11 @@ import org.apache.lucene.codecs.DocValue
 import org.apache.lucene.codecs.FieldInfosFormat;
 import org.apache.lucene.codecs.FieldInfosWriter;
 import org.apache.lucene.codecs.NormsFormat;
-import org.apache.lucene.codecs.SegmentInfoFormat;
 import org.apache.lucene.codecs.StoredFieldsFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosWriter;
 import org.apache.lucene.codecs.lucene40.Lucene40RWDocValuesFormat;
 import org.apache.lucene.codecs.lucene40.Lucene40RWNormsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoWriter;
 import org.apache.lucene.util.LuceneTestCase;
 
 /*
@@ -53,17 +50,6 @@ public class Lucene41RWCodec extends Luc
   private final DocValuesFormat docValues = new Lucene40RWDocValuesFormat();
   private final NormsFormat norms = new Lucene40RWNormsFormat();
   
-  private final SegmentInfoFormat segmentInfosFormat = new Lucene40SegmentInfoFormat() {
-    @Override
-    public org.apache.lucene.codecs.SegmentInfoWriter getSegmentInfoWriter() {
-      if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
-        return super.getSegmentInfoWriter();
-      } else {
-        return new Lucene40SegmentInfoWriter();
-      }
-    }
-  };
-
   @Override
   public FieldInfosFormat fieldInfosFormat() {
     return fieldInfos;
@@ -84,9 +70,4 @@ public class Lucene41RWCodec extends Luc
     return norms;
   }
   
-  @Override
-  public SegmentInfoFormat segmentInfoFormat() {
-    return segmentInfosFormat;
-  }
-  
 }

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java Wed Jan 22 19:04:14 2014
@@ -23,9 +23,6 @@ import org.apache.lucene.codecs.DocValue
 import org.apache.lucene.codecs.FieldInfosFormat;
 import org.apache.lucene.codecs.FieldInfosWriter;
 import org.apache.lucene.codecs.NormsFormat;
-import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoWriter;
 import org.apache.lucene.util.LuceneTestCase;
 
 /**
@@ -47,17 +44,6 @@ public class Lucene42RWCodec extends Luc
       }
     }
   };
-  
-  private final SegmentInfoFormat segmentInfosFormat = new Lucene40SegmentInfoFormat() {
-    @Override
-    public org.apache.lucene.codecs.SegmentInfoWriter getSegmentInfoWriter() {
-      if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
-        return super.getSegmentInfoWriter();
-      } else {
-        return new Lucene40SegmentInfoWriter();
-      }
-    }
-  };
 
   @Override
   public DocValuesFormat getDocValuesFormatForField(String field) {
@@ -72,11 +58,5 @@ public class Lucene42RWCodec extends Luc
   @Override
   public FieldInfosFormat fieldInfosFormat() {
     return fieldInfosFormat;
-  }
-  
-  @Override
-  public SegmentInfoFormat segmentInfoFormat() {
-    return segmentInfosFormat;
-  }
-  
+  }  
 }

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java Wed Jan 22 19:04:14 2014
@@ -21,9 +21,6 @@ import java.io.IOException;
 
 import org.apache.lucene.codecs.FieldInfosFormat;
 import org.apache.lucene.codecs.FieldInfosWriter;
-import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40SegmentInfoWriter;
 import org.apache.lucene.codecs.lucene42.Lucene42FieldInfosFormat;
 import org.apache.lucene.codecs.lucene42.Lucene42FieldInfosWriter;
 import org.apache.lucene.util.LuceneTestCase;
@@ -44,26 +41,9 @@ public class Lucene45RWCodec extends Luc
       }
     }
   };
-  
-  private final SegmentInfoFormat segmentInfosFormat = new Lucene40SegmentInfoFormat() {
-    @Override
-    public org.apache.lucene.codecs.SegmentInfoWriter getSegmentInfoWriter() {
-      if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
-        return super.getSegmentInfoWriter();
-      } else {
-        return new Lucene40SegmentInfoWriter();
-      }
-    }
-  };
 
   @Override
   public FieldInfosFormat fieldInfosFormat() {
     return fieldInfosFormat;
   }
-
-  @Override
-  public SegmentInfoFormat segmentInfoFormat() {
-    return segmentInfosFormat;
-  }
-
 }

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java Wed Jan 22 19:04:14 2014
@@ -333,6 +333,7 @@ public abstract class LuceneTestCase ext
   // Fields initialized in class or instance rules.
   // -----------------------------------------------------------------
 
+  // TODO: why do we have this? This should just use the OLD_FORMAT_IMPERSONATION...
   /**
    * @lucene.internal
    */
@@ -340,12 +341,12 @@ public abstract class LuceneTestCase ext
 
   /**
    * When {@code true}, Codecs for old Lucene version will support writing
-   * indexes in that format. Defaults to {@code true}, can be disabled by
-   * spdecific tests on demand.
+   * indexes in that format. Defaults to {@code false}, can be disabled by
+   * specific tests on demand.
    * 
    * @lucene.internal
    */
-  public static boolean OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
+  public static boolean OLD_FORMAT_IMPERSONATION_IS_ACTIVE = false;
 
   // -----------------------------------------------------------------
   // Class level (suite) rules.

Modified: lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java?rev=1560477&r1=1560476&r2=1560477&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleSetupAndRestoreClassEnv.java Wed Jan 22 19:04:14 2014
@@ -22,7 +22,6 @@ import static org.apache.lucene.util.Luc
 import static org.apache.lucene.util.LuceneTestCase.TEST_DOCVALUESFORMAT;
 import static org.apache.lucene.util.LuceneTestCase.TEST_POSTINGSFORMAT;
 import static org.apache.lucene.util.LuceneTestCase.VERBOSE;
-import static org.apache.lucene.util.LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE;
 import static org.apache.lucene.util.LuceneTestCase.assumeFalse;
 import static org.apache.lucene.util.LuceneTestCase.localeForName;
 import static org.apache.lucene.util.LuceneTestCase.random;
@@ -155,7 +154,10 @@ final class TestRuleSetupAndRestoreClass
       avoidCodecs.addAll(Arrays.asList(a.value()));
     }
     
-    PREFLEX_IMPERSONATION_IS_ACTIVE = false;
+    // set back to default
+    LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE = false;
+    LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE = false;
+    
     savedCodec = Codec.getDefault();
     int randomVal = random.nextInt(10);
     if ("Lucene3x".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) &&
@@ -165,12 +167,13 @@ final class TestRuleSetupAndRestoreClass
                                           !shouldAvoidCodec("Lucene3x"))) { // preflex-only setup
       codec = Codec.forName("Lucene3x");
       assert (codec instanceof PreFlexRWCodec) : "fix your classpath to have tests-framework.jar before lucene-core.jar";
-      PREFLEX_IMPERSONATION_IS_ACTIVE = true;
+      LuceneTestCase.PREFLEX_IMPERSONATION_IS_ACTIVE = true;
     } else if ("Lucene40".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) &&
                                                  "random".equals(TEST_POSTINGSFORMAT) &&
                                                   randomVal == 0 &&
                                                   !shouldAvoidCodec("Lucene40"))) { // 4.0 setup
       codec = Codec.forName("Lucene40");
+      LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
       assert codec instanceof Lucene40RWCodec : "fix your classpath to have tests-framework.jar before lucene-core.jar";
       assert (PostingsFormat.forName("Lucene40") instanceof Lucene40RWPostingsFormat) : "fix your classpath to have tests-framework.jar before lucene-core.jar";
     } else if ("Lucene41".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) &&
@@ -179,6 +182,7 @@ final class TestRuleSetupAndRestoreClass
                                                  randomVal == 1 &&
                                                  !shouldAvoidCodec("Lucene41"))) { 
       codec = Codec.forName("Lucene41");
+      LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
       assert codec instanceof Lucene41RWCodec : "fix your classpath to have tests-framework.jar before lucene-core.jar";
     } else if ("Lucene42".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) &&
                                                  "random".equals(TEST_POSTINGSFORMAT) &&
@@ -186,6 +190,7 @@ final class TestRuleSetupAndRestoreClass
                                                   randomVal == 2 &&
                                                   !shouldAvoidCodec("Lucene42"))) { 
       codec = Codec.forName("Lucene42");
+      LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
       assert codec instanceof Lucene42RWCodec : "fix your classpath to have tests-framework.jar before lucene-core.jar";
     } else if ("Lucene45".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) &&
                                                  "random".equals(TEST_POSTINGSFORMAT) &&
@@ -193,6 +198,7 @@ final class TestRuleSetupAndRestoreClass
                                                   randomVal == 5 &&
                                                   !shouldAvoidCodec("Lucene45"))) { 
       codec = Codec.forName("Lucene45");
+      LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
       assert codec instanceof Lucene45RWCodec : "fix your classpath to have tests-framework.jar before lucene-core.jar";
     } else if (("random".equals(TEST_POSTINGSFORMAT) == false) || ("random".equals(TEST_DOCVALUESFORMAT) == false)) {
       // the user wired postings or DV: this is messy
@@ -232,6 +238,7 @@ final class TestRuleSetupAndRestoreClass
       codec = new SimpleTextCodec();
     } else if ("Appending".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) && randomVal == 8 && !shouldAvoidCodec("Appending"))) {
       codec = new AppendingRWCodec();
+      LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true; // this is really just Lucene40 with some minor changes
     } else if ("CheapBastard".equals(TEST_CODEC) || ("random".equals(TEST_CODEC) && randomVal == 8 && !shouldAvoidCodec("CheapBastard") && !shouldAvoidCodec("Lucene41"))) {
       // we also avoid this codec if Lucene41 is avoided, since thats the postings format it uses.
       codec = new CheapBastardCodec();