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/08/21 18:28:17 UTC

svn commit: r1619477 [2/2] - in /lucene/dev/branches/branch_4x: ./ lucene/ lucene/codecs/ lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/ lucene/core/ lucene/core/src/java/org/apache/lucene/codecs/ lucene/core/src/java/org/apache/lucene/cod...

Modified: lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java Thu Aug 21 16:28:16 2014
@@ -18,18 +18,15 @@ package org.apache.lucene.index;
  */
 
 import java.io.IOException;
-import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.IdentityHashMap;
-import java.util.List;
 import java.util.Map;
-import java.util.Set;
 
 import org.apache.lucene.codecs.Codec;
 import org.apache.lucene.codecs.DocValuesFormat;
 import org.apache.lucene.codecs.DocValuesProducer;
 import org.apache.lucene.codecs.FieldInfosFormat;
+import org.apache.lucene.codecs.NormsProducer;
 import org.apache.lucene.codecs.StoredFieldsReader;
 import org.apache.lucene.codecs.TermVectorsReader;
 import org.apache.lucene.index.FieldInfo.DocValuesType;
@@ -41,8 +38,6 @@ import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.CloseableThreadLocal;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.RamUsageEstimator;
-import org.apache.lucene.util.StringHelper;
-import org.apache.lucene.util.Version;
 
 /**
  * IndexReader implementation over a single segment. 
@@ -56,7 +51,6 @@ public final class SegmentReader extends
   private static final long BASE_RAM_BYTES_USED =
         RamUsageEstimator.shallowSizeOfInstance(SegmentReader.class)
       + RamUsageEstimator.shallowSizeOfInstance(SegmentDocValues.class);
-  private static final long LONG_RAM_BYTES_USED = RamUsageEstimator.shallowSizeOfInstance(Long.class);
         
   private final SegmentCommitInfo si;
   private final Bits liveDocs;
@@ -83,12 +77,8 @@ public final class SegmentReader extends
     }
   };
 
-  final Map<String,DocValuesProducer> dvProducersByField = new HashMap<>();
-  final Set<DocValuesProducer> dvProducers = Collections.newSetFromMap(new IdentityHashMap<DocValuesProducer,Boolean>());
-  
+  final DocValuesProducer docValuesProducer;
   final FieldInfos fieldInfos;
-
-  private final List<Long> dvGens = new ArrayList<>();
   
   /**
    * Constructs a new SegmentReader with a new core.
@@ -121,7 +111,9 @@ public final class SegmentReader extends
       numDocs = si.info.getDocCount() - si.getDelCount();
 
       if (fieldInfos.hasDocValues()) {
-        initDocValuesProducers(codec);
+        docValuesProducer = initDocValuesProducer(codec);
+      } else {
+        docValuesProducer = null;
       }
 
       success = true;
@@ -171,7 +163,9 @@ public final class SegmentReader extends
       }
       
       if (fieldInfos.hasDocValues()) {
-        initDocValuesProducers(codec);
+        docValuesProducer = initDocValuesProducer(codec);
+      } else {
+        docValuesProducer = null;
       }
       success = true;
     } finally {
@@ -182,82 +176,16 @@ public final class SegmentReader extends
   }
 
   // initialize the per-field DocValuesProducer
-  @SuppressWarnings("deprecation")
-  private void initDocValuesProducers(Codec codec) throws IOException {
+  private DocValuesProducer initDocValuesProducer(Codec codec) throws IOException {
     final Directory dir = core.cfsReader != null ? core.cfsReader : si.info.dir;
     final DocValuesFormat dvFormat = codec.docValuesFormat();
 
     int termsIndexDivisor = getTermInfosIndexDivisor();
     if (!si.hasFieldUpdates()) {
       // simple case, no DocValues updates
-      final DocValuesProducer dvp = segDocValues.getDocValuesProducer(-1L, si, IOContext.READ, dir, dvFormat, fieldInfos, termsIndexDivisor);
-      dvGens.add(-1L);
-      dvProducers.add(dvp);
-      for (FieldInfo fi : fieldInfos) {
-        if (!fi.hasDocValues()) continue;
-        assert fi.getDocValuesGen() == -1;
-        dvProducersByField.put(fi.name, dvp);
-      }
-      return;
-    }
-
-    Version ver = si.info.getVersion();
-    if (ver != null && ver.onOrAfter(Version.LUCENE_4_9_0)) {
-      DocValuesProducer baseProducer = null;
-      for (FieldInfo fi : fieldInfos) {
-        if (!fi.hasDocValues()) continue;
-        long docValuesGen = fi.getDocValuesGen();
-        if (docValuesGen == -1) {
-          if (baseProducer == null) {
-//        System.out.println("[" + Thread.currentThread().getName() + "] SR.initDocValuesProducers: segInfo=" + si + "; gen=" + docValuesGen + "; field=" + fi.name);
-            // the base producer gets all the fields, so the Codec can validate properly
-            baseProducer = segDocValues.getDocValuesProducer(docValuesGen, si, IOContext.READ, dir, dvFormat, fieldInfos, termsIndexDivisor);
-            dvGens.add(docValuesGen);
-            dvProducers.add(baseProducer);
-          }
-//        System.out.println("[" + Thread.currentThread().getName() + "] SR.initDocValuesProducers: segInfo=" + si + "; gen=" + docValuesGen + "; field=" + fi.name);
-          dvProducersByField.put(fi.name, baseProducer);
-        } else {
-          assert !dvGens.contains(docValuesGen);
-//        System.out.println("[" + Thread.currentThread().getName() + "] SR.initDocValuesProducers: segInfo=" + si + "; gen=" + docValuesGen + "; field=" + fi.name);
-          final DocValuesProducer dvp = segDocValues.getDocValuesProducer(docValuesGen, si, IOContext.READ, dir, dvFormat, new FieldInfos(new FieldInfo[] { fi }), termsIndexDivisor);
-          dvGens.add(docValuesGen);
-          dvProducers.add(dvp);
-          dvProducersByField.put(fi.name, dvp);
-        }
-      }
+      return segDocValues.getDocValuesProducer(-1L, si, IOContext.READ, dir, dvFormat, fieldInfos, termsIndexDivisor);
     } else {
-      // For pre-4.9 indexes, especially with doc-values updates, multiple
-      // FieldInfos could belong to the same dvGen. Therefore need to make sure
-      // we initialize each DocValuesProducer once per gen.
-      Map<Long,List<FieldInfo>> genInfos = new HashMap<>();
-      for (FieldInfo fi : fieldInfos) {
-        if (!fi.hasDocValues()) continue;
-        List<FieldInfo> genFieldInfos = genInfos.get(fi.getDocValuesGen());
-        if (genFieldInfos == null) {
-          genFieldInfos = new ArrayList<>();
-          genInfos.put(fi.getDocValuesGen(), genFieldInfos);
-        }
-        genFieldInfos.add(fi);
-      }
-      
-      for (Map.Entry<Long,List<FieldInfo>> e : genInfos.entrySet()) {
-        long docValuesGen = e.getKey();
-        List<FieldInfo> infos = e.getValue();
-        final DocValuesProducer dvp;
-        if (docValuesGen == -1) {
-          // we need to send all FieldInfos to gen=-1, but later we need to
-          // record the DVP only for the "true" gen=-1 fields (not updated)
-          dvp = segDocValues.getDocValuesProducer(docValuesGen, si, IOContext.READ, dir, dvFormat, fieldInfos, termsIndexDivisor);
-        } else {
-          dvp = segDocValues.getDocValuesProducer(docValuesGen, si, IOContext.READ, dir, dvFormat, new FieldInfos(infos.toArray(new FieldInfo[infos.size()])), termsIndexDivisor);
-        }
-        dvGens.add(docValuesGen);
-        dvProducers.add(dvp);
-        for (FieldInfo fi : infos) {
-          dvProducersByField.put(fi.name, dvp);
-        }
-      }
+      return new SegmentDocValuesProducer(si, dir, fieldInfos, segDocValues, dvFormat, termsIndexDivisor);
     }
   }
   
@@ -306,11 +234,14 @@ public final class SegmentReader extends
     try {
       core.decRef();
     } finally {
-      dvProducersByField.clear();
       try {
         IOUtils.close(docValuesLocal, docsWithFieldLocal);
       } finally {
-        segDocValues.decRef(dvGens);
+        if (docValuesProducer instanceof SegmentDocValuesProducer) {
+          segDocValues.decRef(((SegmentDocValuesProducer)docValuesProducer).dvGens);
+        } else if (docValuesProducer != null) {
+          segDocValues.decRef(Collections.singletonList(-1L));
+        }
       }
     }
   }
@@ -320,14 +251,6 @@ public final class SegmentReader extends
     ensureOpen();
     return fieldInfos;
   }
-
-  /** Expert: retrieve thread-private {@link
-   *  StoredFieldsReader}
-   *  @lucene.internal */
-  public StoredFieldsReader getFieldsReader() {
-    ensureOpen();
-    return core.fieldsReaderLocal.get();
-  }
   
   @Override
   public void document(int docID, StoredFieldVisitor visitor) throws IOException {
@@ -361,6 +284,28 @@ public final class SegmentReader extends
     return core.termVectorsLocal.get();
   }
 
+  /** Expert: retrieve thread-private {@link
+   *  StoredFieldsReader}
+   *  @lucene.internal */
+  public StoredFieldsReader getFieldsReader() {
+    ensureOpen();
+    return core.fieldsReaderLocal.get();
+  }
+  
+  /** Expert: retrieve underlying NormsProducer
+   *  @lucene.internal */
+  public NormsProducer getNormsReader() {
+    ensureOpen();
+    return core.normsProducer;
+  }
+  
+  /** Expert: retrieve underlying DocValuesProducer
+   *  @lucene.internal */
+  public DocValuesProducer getDocValuesReader() {
+    ensureOpen();
+    return docValuesProducer;
+  }
+
   @Override
   public Fields getTermVectors(int docID) throws IOException {
     TermVectorsReader termVectorsReader = getTermVectorsReader();
@@ -462,9 +407,7 @@ public final class SegmentReader extends
       if (fi == null) {
         return null;
       }
-      DocValuesProducer dvProducer = dvProducersByField.get(field);
-      assert dvProducer != null;
-      NumericDocValues dv = dvProducer.getNumeric(fi);
+      NumericDocValues dv = docValuesProducer.getNumeric(fi);
       dvFields.put(field, dv);
       return dv;
     }
@@ -488,9 +431,7 @@ public final class SegmentReader extends
         // Field was not indexed with doc values
         return null;
       }
-      DocValuesProducer dvProducer = dvProducersByField.get(field);
-      assert dvProducer != null;
-      Bits dv = dvProducer.getDocsWithField(fi);
+      Bits dv = docValuesProducer.getDocsWithField(fi);
       dvFields.put(field, dv);
       return dv;
     }
@@ -508,9 +449,7 @@ public final class SegmentReader extends
 
     BinaryDocValues dvs = (BinaryDocValues) dvFields.get(field);
     if (dvs == null) {
-      DocValuesProducer dvProducer = dvProducersByField.get(field);
-      assert dvProducer != null;
-      dvs = dvProducer.getBinary(fi);
+      dvs = docValuesProducer.getBinary(fi);
       dvFields.put(field, dvs);
     }
 
@@ -530,9 +469,7 @@ public final class SegmentReader extends
       if (fi == null) {
         return null;
       }
-      DocValuesProducer dvProducer = dvProducersByField.get(field);
-      assert dvProducer != null;
-      SortedDocValues dv = dvProducer.getSorted(fi);
+      SortedDocValues dv = docValuesProducer.getSorted(fi);
       dvFields.put(field, dv);
       return dv;
     }
@@ -551,9 +488,7 @@ public final class SegmentReader extends
       if (fi == null) {
         return null;
       }
-      DocValuesProducer dvProducer = dvProducersByField.get(field);
-      assert dvProducer != null;
-      SortedNumericDocValues dv = dvProducer.getSortedNumeric(fi);
+      SortedNumericDocValues dv = docValuesProducer.getSortedNumeric(fi);
       dvFields.put(field, dv);
       return dv;
     }
@@ -572,9 +507,7 @@ public final class SegmentReader extends
       if (fi == null) {
         return null;
       }
-      DocValuesProducer dvProducer = dvProducersByField.get(field);
-      assert dvProducer != null;
-      SortedSetDocValues dv = dvProducer.getSortedSet(fi);
+      SortedSetDocValues dv = docValuesProducer.getSortedSet(fi);
       dvFields.put(field, dv);
       return dv;
     }
@@ -602,13 +535,8 @@ public final class SegmentReader extends
   public long ramBytesUsed() {
     ensureOpen();
     long ramBytesUsed = BASE_RAM_BYTES_USED;
-    ramBytesUsed += dvGens.size() * LONG_RAM_BYTES_USED;
-    ramBytesUsed += dvProducers.size() * RamUsageEstimator.NUM_BYTES_OBJECT_REF;
-    ramBytesUsed += dvProducersByField.size() * 2 * RamUsageEstimator.NUM_BYTES_OBJECT_REF;
-    if (dvProducers != null) {
-      for (DocValuesProducer producer : dvProducers) {
-        ramBytesUsed += producer.ramBytesUsed();
-      }
+    if (docValuesProducer != null) {
+      ramBytesUsed += docValuesProducer.ramBytesUsed();
     }
     if (core != null) {
       ramBytesUsed += core.ramBytesUsed();
@@ -640,10 +568,8 @@ public final class SegmentReader extends
     }
     
     // docvalues
-    if (dvProducers != null) {
-      for (DocValuesProducer producer : dvProducers) {
-        producer.checkIntegrity();
-      }
+    if (docValuesProducer != null) {
+      docValuesProducer.checkIntegrity();
     }
   }
 }

Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/index/TestCodecs.java Thu Aug 21 16:28:16 2014
@@ -717,10 +717,10 @@ public class TestCodecs extends LuceneTe
     Document doc = new Document();
     doc.add(new StringField("f", "bar", Store.YES));
     doc.add(new NumericDocValuesField("n", 18L));
-    writer.addDocument(doc);
     
     OLD_FORMAT_IMPERSONATION_IS_ACTIVE = false;
     try {
+      writer.addDocument(doc);
       writer.close();
       fail("should not have succeeded to impersonate an old format!");
     } catch (UnsupportedOperationException e) {

Modified: lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java (original)
+++ lucene/dev/branches/branch_4x/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java Thu Aug 21 16:28:16 2014
@@ -26,7 +26,7 @@ import java.util.Set;
 
 import org.apache.lucene.analysis.MockAnalyzer;
 import org.apache.lucene.codecs.Codec;
-import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsWriter;
+import org.apache.lucene.codecs.compressing.CompressingStoredFieldsWriter;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.index.IndexWriter;
@@ -42,8 +42,8 @@ public class TestFileSwitchDirectory ext
    */
   public void testBasic() throws IOException {
     Set<String> fileExtensions = new HashSet<>();
-    fileExtensions.add(Lucene40StoredFieldsWriter.FIELDS_EXTENSION);
-    fileExtensions.add(Lucene40StoredFieldsWriter.FIELDS_INDEX_EXTENSION);
+    fileExtensions.add(CompressingStoredFieldsWriter.FIELDS_EXTENSION);
+    fileExtensions.add(CompressingStoredFieldsWriter.FIELDS_INDEX_EXTENSION);
     
     MockDirectoryWrapper primaryDir = new MockDirectoryWrapper(random(), new RAMDirectory());
     primaryDir.setCheckIndexOnClose(false); // only part of an index

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingDocValuesFormat.java Thu Aug 21 16:28:16 2014
@@ -207,54 +207,7 @@ public class AssertingDocValuesFormat ex
     }
   }
   
-  static class AssertingNormsConsumer extends DocValuesConsumer {
-    private final DocValuesConsumer in;
-    private final int maxDoc;
-    
-    AssertingNormsConsumer(DocValuesConsumer in, int maxDoc) {
-      this.in = in;
-      this.maxDoc = maxDoc;
-    }
-
-    @Override
-    public void addNumericField(FieldInfo field, Iterable<Number> values) throws IOException {
-      int count = 0;
-      for (Number v : values) {
-        assert v != null;
-        count++;
-      }
-      assert count == maxDoc;
-      checkIterator(values.iterator(), maxDoc, false);
-      in.addNumericField(field, values);
-    }
-
-    @Override
-    public void close() throws IOException {
-      in.close();
-    }
-
-    @Override
-    public void addBinaryField(FieldInfo field, Iterable<BytesRef> values) throws IOException {
-      throw new IllegalStateException();
-    }
-
-    @Override
-    public void addSortedField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrd) throws IOException {
-      throw new IllegalStateException();
-    }
-    
-    @Override
-    public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
-      throw new IllegalStateException();
-    }
-
-    @Override
-    public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
-      throw new IllegalStateException();
-    }
-  }
-  
-  private static <T> void checkIterator(Iterator<T> iterator, long expectedSize, boolean allowNull) {
+  static <T> void checkIterator(Iterator<T> iterator, long expectedSize, boolean allowNull) {
     for (long i = 0; i < expectedSize; i++) {
       boolean hasNext = iterator.hasNext();
       assert hasNext;
@@ -287,8 +240,7 @@ public class AssertingDocValuesFormat ex
 
     @Override
     public NumericDocValues getNumeric(FieldInfo field) throws IOException {
-      assert field.getDocValuesType() == FieldInfo.DocValuesType.NUMERIC || 
-             field.getNormType() == FieldInfo.DocValuesType.NUMERIC;
+      assert field.getDocValuesType() == FieldInfo.DocValuesType.NUMERIC;
       NumericDocValues values = in.getNumeric(field);
       assert values != null;
       return new AssertingAtomicReader.AssertingNumericDocValues(values, maxDoc);

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingNormsFormat.java Thu Aug 21 16:28:16 2014
@@ -19,12 +19,13 @@ package org.apache.lucene.codecs.asserti
 
 import java.io.IOException;
 
-import org.apache.lucene.codecs.DocValuesConsumer;
-import org.apache.lucene.codecs.DocValuesProducer;
+import org.apache.lucene.codecs.NormsConsumer;
 import org.apache.lucene.codecs.NormsFormat;
-import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat.AssertingNormsConsumer;
-import org.apache.lucene.codecs.asserting.AssertingDocValuesFormat.AssertingDocValuesProducer;
+import org.apache.lucene.codecs.NormsProducer;
 import org.apache.lucene.codecs.lucene49.Lucene49NormsFormat;
+import org.apache.lucene.index.AssertingAtomicReader;
+import org.apache.lucene.index.FieldInfo;
+import org.apache.lucene.index.NumericDocValues;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.index.SegmentWriteState;
 
@@ -35,17 +36,77 @@ public class AssertingNormsFormat extend
   private final NormsFormat in = new Lucene49NormsFormat();
   
   @Override
-  public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
-    DocValuesConsumer consumer = in.normsConsumer(state);
+  public NormsConsumer normsConsumer(SegmentWriteState state) throws IOException {
+    NormsConsumer consumer = in.normsConsumer(state);
     assert consumer != null;
     return new AssertingNormsConsumer(consumer, state.segmentInfo.getDocCount());
   }
 
   @Override
-  public DocValuesProducer normsProducer(SegmentReadState state) throws IOException {
+  public NormsProducer normsProducer(SegmentReadState state) throws IOException {
     assert state.fieldInfos.hasNorms();
-    DocValuesProducer producer = in.normsProducer(state);
+    NormsProducer producer = in.normsProducer(state);
     assert producer != null;
-    return new AssertingDocValuesProducer(producer, state.segmentInfo.getDocCount());
+    return new AssertingNormsProducer(producer, state.segmentInfo.getDocCount());
+  }
+  
+  static class AssertingNormsConsumer extends NormsConsumer {
+    private final NormsConsumer in;
+    private final int maxDoc;
+    
+    AssertingNormsConsumer(NormsConsumer in, int maxDoc) {
+      this.in = in;
+      this.maxDoc = maxDoc;
+    }
+
+    @Override
+    public void addNormsField(FieldInfo field, Iterable<Number> values) throws IOException {
+      int count = 0;
+      for (Number v : values) {
+        assert v != null;
+        count++;
+      }
+      assert count == maxDoc;
+      AssertingDocValuesFormat.checkIterator(values.iterator(), maxDoc, false);
+      in.addNormsField(field, values);
+    }
+    
+    @Override
+    public void close() throws IOException {
+      in.close();
+    }
+  }
+  
+  static class AssertingNormsProducer extends NormsProducer {
+    private final NormsProducer in;
+    private final int maxDoc;
+    
+    AssertingNormsProducer(NormsProducer in, int maxDoc) {
+      this.in = in;
+      this.maxDoc = maxDoc;
+    }
+
+    @Override
+    public NumericDocValues getNorms(FieldInfo field) throws IOException {
+      assert field.getNormType() == FieldInfo.DocValuesType.NUMERIC;
+      NumericDocValues values = in.getNorms(field);
+      assert values != null;
+      return new AssertingAtomicReader.AssertingNumericDocValues(values, maxDoc);
+    }
+
+    @Override
+    public void close() throws IOException {
+      in.close();
+    }
+
+    @Override
+    public long ramBytesUsed() {
+      return in.ramBytesUsed();
+    }
+
+    @Override
+    public void checkIntegrity() throws IOException {
+      in.checkIntegrity();
+    }
   }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/asserting/AssertingTermVectorsFormat.java Thu Aug 21 16:28:16 2014
@@ -23,7 +23,7 @@ import java.util.Comparator;
 import org.apache.lucene.codecs.TermVectorsFormat;
 import org.apache.lucene.codecs.TermVectorsReader;
 import org.apache.lucene.codecs.TermVectorsWriter;
-import org.apache.lucene.codecs.lucene40.Lucene40TermVectorsFormat;
+import org.apache.lucene.codecs.lucene42.Lucene42TermVectorsFormat;
 import org.apache.lucene.index.AssertingAtomicReader;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfos;
@@ -34,10 +34,10 @@ import org.apache.lucene.store.IOContext
 import org.apache.lucene.util.BytesRef;
 
 /**
- * Just like {@link Lucene40TermVectorsFormat} but with additional asserts.
+ * Just like {@link Lucene42TermVectorsFormat} but with additional asserts.
  */
 public class AssertingTermVectorsFormat extends TermVectorsFormat {
-  private final TermVectorsFormat in = new Lucene40TermVectorsFormat();
+  private final TermVectorsFormat in = new Lucene42TermVectorsFormat();
 
   @Override
   public TermVectorsReader vectorsReader(Directory directory, SegmentInfo segmentInfo, FieldInfos fieldInfos, IOContext context) throws IOException {

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cheapbastard/CheapBastardCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cheapbastard/CheapBastardCodec.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cheapbastard/CheapBastardCodec.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cheapbastard/CheapBastardCodec.java Thu Aug 21 16:28:16 2014
@@ -23,11 +23,11 @@ import org.apache.lucene.codecs.NormsFor
 import org.apache.lucene.codecs.PostingsFormat;
 import org.apache.lucene.codecs.StoredFieldsFormat;
 import org.apache.lucene.codecs.TermVectorsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40StoredFieldsFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40TermVectorsFormat;
 import org.apache.lucene.codecs.lucene41.Lucene41PostingsFormat;
+import org.apache.lucene.codecs.lucene41.Lucene41StoredFieldsFormat;
 import org.apache.lucene.codecs.lucene410.Lucene410Codec;
 import org.apache.lucene.codecs.lucene410.Lucene410DocValuesFormat;
+import org.apache.lucene.codecs.lucene42.Lucene42TermVectorsFormat;
 import org.apache.lucene.codecs.lucene49.Lucene49NormsFormat;
 
 /** Codec that tries to use as little ram as possible because he spent all his money on beer */
@@ -37,9 +37,8 @@ public class CheapBastardCodec extends F
   
   // TODO: would be better to have no terms index at all and bsearch a terms dict
   private final PostingsFormat postings = new Lucene41PostingsFormat(100, 200);
-  // uncompressing versions, waste lots of disk but no ram
-  private final StoredFieldsFormat storedFields = new Lucene40StoredFieldsFormat();
-  private final TermVectorsFormat termVectors = new Lucene40TermVectorsFormat();
+  private final StoredFieldsFormat storedFields = new Lucene41StoredFieldsFormat();
+  private final TermVectorsFormat termVectors = new Lucene42TermVectorsFormat();
   private final DocValuesFormat docValues = new Lucene410DocValuesFormat();
   private final NormsFormat norms = new Lucene49NormsFormat();
 

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyNormsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyNormsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyNormsFormat.java Thu Aug 21 16:28:16 2014
@@ -20,9 +20,10 @@ package org.apache.lucene.codecs.cranky;
 import java.io.IOException;
 import java.util.Random;
 
-import org.apache.lucene.codecs.DocValuesConsumer;
-import org.apache.lucene.codecs.DocValuesProducer;
+import org.apache.lucene.codecs.NormsConsumer;
 import org.apache.lucene.codecs.NormsFormat;
+import org.apache.lucene.codecs.NormsProducer;
+import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.SegmentReadState;
 import org.apache.lucene.index.SegmentWriteState;
 
@@ -36,15 +37,41 @@ class CrankyNormsFormat extends NormsFor
   }
 
   @Override
-  public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
+  public NormsConsumer normsConsumer(SegmentWriteState state) throws IOException {
     if (random.nextInt(100) == 0) {
-      throw new IOException("Fake IOException from NormsFormat.fieldsConsumer()");
+      throw new IOException("Fake IOException from NormsFormat.normsConsumer()");
     }
-    return new CrankyDocValuesFormat.CrankyDocValuesConsumer(delegate.normsConsumer(state), random);
+    return new CrankyNormsConsumer(delegate.normsConsumer(state), random);
   }
 
   @Override
-  public DocValuesProducer normsProducer(SegmentReadState state) throws IOException {
+  public NormsProducer normsProducer(SegmentReadState state) throws IOException {
     return delegate.normsProducer(state);
   }
+  
+  static class CrankyNormsConsumer extends NormsConsumer {
+    final NormsConsumer delegate;
+    final Random random;
+    
+    CrankyNormsConsumer(NormsConsumer delegate, Random random) {
+      this.delegate = delegate;
+      this.random = random;
+    }
+    
+    @Override
+    public void close() throws IOException {
+      delegate.close();
+      if (random.nextInt(100) == 0) {
+        throw new IOException("Fake IOException from NormsConsumer.close()");
+      }
+    }
+
+    @Override
+    public void addNormsField(FieldInfo field, Iterable<Number> values) throws IOException {
+      if (random.nextInt(100) == 0) {
+        throw new IOException("Fake IOException from NormsConsumer.addNormsField()");
+      }
+      delegate.addNormsField(field, values);
+    }
+  }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPostingsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPostingsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPostingsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyPostingsFormat.java Thu Aug 21 16:28:16 2014
@@ -81,11 +81,11 @@ class CrankyPostingsFormat extends Posti
     }
 
     @Override
-    public void merge(MergeState mergeState, Fields fields) throws IOException {
+    public void merge(MergeState mergeState) throws IOException {
       if (random.nextInt(100) == 0) {
         throw new IOException("Fake IOException from FieldsConsumer.merge()");
       }  
-      super.merge(mergeState, fields);
+      super.merge(mergeState);
     }
 
     @Override

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsConsumer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsConsumer.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsConsumer.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsConsumer.java Thu Aug 21 16:28:16 2014
@@ -19,20 +19,19 @@ package org.apache.lucene.codecs.lucene3
 
 import java.io.IOException;
 
-import org.apache.lucene.codecs.DocValuesConsumer;
+import org.apache.lucene.codecs.NormsConsumer;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexOutput;
-import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.IOUtils;
 
 /**
  * Writes and Merges Lucene 3.x norms format
  * @lucene.experimental
  */
-class PreFlexRWNormsConsumer extends DocValuesConsumer {
+class PreFlexRWNormsConsumer extends NormsConsumer {
   
   /** norms header placeholder */
   private static final byte[] NORMS_HEADER = new byte[]{'N','R','M',-1};
@@ -65,7 +64,7 @@ class PreFlexRWNormsConsumer extends Doc
   }
 
   @Override
-  public void addNumericField(FieldInfo field, Iterable<Number> values) throws IOException {
+  public void addNormsField(FieldInfo field, Iterable<Number> values) throws IOException {
     assert field.number > lastFieldNumber : "writing norms fields out of order" + lastFieldNumber + " -> " + field.number;
     for (Number n : values) {
       if (n.longValue() < Byte.MIN_VALUE || n.longValue() > Byte.MAX_VALUE) {
@@ -80,24 +79,4 @@ class PreFlexRWNormsConsumer extends Doc
   public void close() throws IOException {
     IOUtils.close(out);
   }
-
-  @Override
-  public void addBinaryField(FieldInfo field, Iterable<BytesRef> values) throws IOException {
-    throw new AssertionError();
-  }
-
-  @Override
-  public void addSortedField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrd) throws IOException {
-    throw new AssertionError();
-  }
-
-  @Override
-  public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrdCount, Iterable<Number> ords) throws IOException {
-    throw new AssertionError();
-  }
-
-  @Override
-  public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
-    throw new AssertionError();
-  }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene3x/PreFlexRWNormsFormat.java Thu Aug 21 16:28:16 2014
@@ -20,6 +20,7 @@ package org.apache.lucene.codecs.lucene3
 import java.io.IOException;
 
 import org.apache.lucene.codecs.DocValuesConsumer;
+import org.apache.lucene.codecs.NormsConsumer;
 import org.apache.lucene.index.SegmentWriteState;
 
 /**
@@ -29,7 +30,7 @@ import org.apache.lucene.index.SegmentWr
 class PreFlexRWNormsFormat extends Lucene3xNormsFormat {
 
   @Override
-  public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
+  public NormsConsumer normsConsumer(SegmentWriteState state) throws IOException {
     return new PreFlexRWNormsConsumer(state.directory, state.segmentInfo.name, state.context);
   }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java Thu Aug 21 16:28:16 2014
@@ -6,7 +6,8 @@ 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.TermVectorsFormat;
 import org.apache.lucene.util.LuceneTestCase;
 
 /*
@@ -43,6 +44,8 @@ public final class Lucene40RWCodec exten
   
   private final DocValuesFormat docValues = new Lucene40RWDocValuesFormat();
   private final NormsFormat norms = new Lucene40RWNormsFormat();
+  private final StoredFieldsFormat stored = new Lucene40RWStoredFieldsFormat();
+  private final TermVectorsFormat vectors = new Lucene40RWTermVectorsFormat();
   
   @Override
   public FieldInfosFormat fieldInfosFormat() {
@@ -58,5 +61,14 @@ public final class Lucene40RWCodec exten
   public NormsFormat normsFormat() {
     return norms;
   }
-  
+
+  @Override
+  public StoredFieldsFormat storedFieldsFormat() {
+    return stored;
+  }
+
+  @Override
+  public TermVectorsFormat termVectorsFormat() {
+    return vectors;
+  }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java Thu Aug 21 16:28:16 2014
@@ -19,7 +19,8 @@ package org.apache.lucene.codecs.lucene4
 
 import java.io.IOException;
 
-import org.apache.lucene.codecs.DocValuesConsumer;
+import org.apache.lucene.codecs.NormsConsumer;
+import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentWriteState;
 import org.apache.lucene.util.LuceneTestCase;
@@ -29,14 +30,25 @@ import org.apache.lucene.util.LuceneTest
 public class Lucene40RWNormsFormat extends Lucene40NormsFormat {
 
   @Override
-  public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
+  public NormsConsumer normsConsumer(SegmentWriteState state) throws IOException {
     if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
       return super.normsConsumer(state);
     } else {
       String filename = IndexFileNames.segmentFileName(state.segmentInfo.name, 
           "nrm", 
           IndexFileNames.COMPOUND_FILE_EXTENSION);
-      return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_NORM_TYPE_KEY);
+      final Lucene40DocValuesWriter impl = new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_NORM_TYPE_KEY);
+      return new NormsConsumer() {
+        @Override
+        public void addNormsField(FieldInfo field, Iterable<Number> values) throws IOException {
+          impl.addNumericField(field, values);
+        }
+        
+        @Override
+        public void close() throws IOException {
+          impl.close();
+        }
+      };
     }
   }
 }

Copied: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java (from r1619392, lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java?p2=lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java&p1=lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java&r1=1619392&r2=1619477&rev=1619477&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40StoredFieldsWriter.java Thu Aug 21 16:28:16 2014
@@ -23,7 +23,7 @@ import org.apache.lucene.codecs.StoredFi
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.FieldInfos;
 import org.apache.lucene.index.IndexFileNames;
-import org.apache.lucene.index.StorableField;
+import org.apache.lucene.index.IndexableField;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexOutput;
@@ -112,7 +112,7 @@ public final class Lucene40StoredFieldsW
   }
 
   @Override
-  public void writeField(FieldInfo info, StorableField field) throws IOException {
+  public void writeField(FieldInfo info, IndexableField field) throws IOException {
     numStoredFields++;
 
     fieldsBuffer.writeVInt(info.number);

Copied: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java (from r1619392, lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java)
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java?p2=lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java&p1=lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java&r1=1619392&r2=1619477&rev=1619477&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene40/Lucene40TermVectorsWriter.java Thu Aug 21 16:28:16 2014
@@ -18,6 +18,7 @@ package org.apache.lucene.codecs.lucene4
  */
 
 import java.io.IOException;
+import java.util.Comparator;
 
 import org.apache.lucene.codecs.CodecUtil;
 import org.apache.lucene.codecs.TermVectorsWriter;
@@ -300,4 +301,9 @@ public final class Lucene40TermVectorsWr
     IOUtils.close(tvx, tvd, tvf);
     tvx = tvd = tvf = null;
   }
+
+  @Override
+  public Comparator<BytesRef> getComparator() throws IOException {
+    return BytesRef.getUTF8SortedAsUnicodeComparator();
+  }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java Thu Aug 21 16:28:16 2014
@@ -7,10 +7,12 @@ import org.apache.lucene.codecs.FieldInf
 import org.apache.lucene.codecs.FieldInfosWriter;
 import org.apache.lucene.codecs.NormsFormat;
 import org.apache.lucene.codecs.StoredFieldsFormat;
+import org.apache.lucene.codecs.TermVectorsFormat;
 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.Lucene40RWTermVectorsFormat;
 import org.apache.lucene.util.LuceneTestCase;
 
 /*
@@ -49,6 +51,7 @@ public class Lucene41RWCodec extends Luc
   
   private final DocValuesFormat docValues = new Lucene40RWDocValuesFormat();
   private final NormsFormat norms = new Lucene40RWNormsFormat();
+  private final TermVectorsFormat vectors = new Lucene40RWTermVectorsFormat();
   
   @Override
   public FieldInfosFormat fieldInfosFormat() {
@@ -70,4 +73,8 @@ public class Lucene41RWCodec extends Luc
     return norms;
   }
   
+  @Override
+  public TermVectorsFormat termVectorsFormat() {
+    return vectors;
+  }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42NormsConsumer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42NormsConsumer.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42NormsConsumer.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42NormsConsumer.java Thu Aug 21 16:28:16 2014
@@ -22,12 +22,11 @@ import java.util.HashMap;
 import java.util.HashSet;
 
 import org.apache.lucene.codecs.CodecUtil;
-import org.apache.lucene.codecs.DocValuesConsumer;
+import org.apache.lucene.codecs.NormsConsumer;
 import org.apache.lucene.index.FieldInfo;
 import org.apache.lucene.index.IndexFileNames;
 import org.apache.lucene.index.SegmentWriteState;
 import org.apache.lucene.store.IndexOutput;
-import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.IOUtils;
 import org.apache.lucene.util.MathUtil;
 import org.apache.lucene.util.packed.BlockPackedWriter;
@@ -39,7 +38,7 @@ import static org.apache.lucene.codecs.l
 /**
  * Writer for {@link Lucene42NormsFormat}
  */
-class Lucene42NormsConsumer extends DocValuesConsumer { 
+class Lucene42NormsConsumer extends NormsConsumer { 
   static final byte NUMBER = 0;
 
   static final int BLOCK_SIZE = 4096;
@@ -73,7 +72,7 @@ class Lucene42NormsConsumer extends DocV
   }
 
   @Override
-  public void addNumericField(FieldInfo field, Iterable<Number> values) throws IOException {
+  public void addNormsField(FieldInfo field, Iterable<Number> values) throws IOException {
     meta.writeVInt(field.number);
     meta.writeByte(NUMBER);
     meta.writeLong(data.getFilePointer());
@@ -194,24 +193,4 @@ class Lucene42NormsConsumer extends DocV
       meta = data = null;
     }
   }
-
-  @Override
-  public void addBinaryField(FieldInfo field, final Iterable<BytesRef> values) throws IOException {
-    throw new UnsupportedOperationException();
-  }
-  
-  @Override
-  public void addSortedField(FieldInfo field, Iterable<BytesRef> values, Iterable<Number> docToOrd) throws IOException {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public void addSortedNumericField(FieldInfo field, Iterable<Number> docToValueCount, Iterable<Number> values) throws IOException {
-    throw new UnsupportedOperationException();
-  }
-
-  @Override
-  public void addSortedSetField(FieldInfo field, Iterable<BytesRef> values, final Iterable<Number> docToOrdCount, final Iterable<Number> ords) throws IOException {
-    throw new UnsupportedOperationException();
-  }
 }

Modified: lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWNormsFormat.java?rev=1619477&r1=1619476&r2=1619477&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWNormsFormat.java (original)
+++ lucene/dev/branches/branch_4x/lucene/test-framework/src/java/org/apache/lucene/codecs/lucene42/Lucene42RWNormsFormat.java Thu Aug 21 16:28:16 2014
@@ -19,7 +19,7 @@ package org.apache.lucene.codecs.lucene4
 
 import java.io.IOException;
 
-import org.apache.lucene.codecs.DocValuesConsumer;
+import org.apache.lucene.codecs.NormsConsumer;
 import org.apache.lucene.index.SegmentWriteState;
 import org.apache.lucene.util.LuceneTestCase;
 
@@ -29,7 +29,7 @@ import org.apache.lucene.util.LuceneTest
 public class Lucene42RWNormsFormat extends Lucene42NormsFormat {
 
   @Override
-  public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
+  public NormsConsumer normsConsumer(SegmentWriteState state) throws IOException {
     if (LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
       return new Lucene42NormsConsumer(state, DATA_CODEC, DATA_EXTENSION, METADATA_CODEC, METADATA_EXTENSION, acceptableOverheadRatio);
     } else {