mirror of https://github.com/apache/lucene.git
LUCENE-5196: add LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE
git-svn-id: https://svn.apache.org/repos/asf/lucene/dev/trunk@1519258 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
2ddb8154f4
commit
1b9c6a24d4
|
@ -30,10 +30,14 @@ import org.apache.lucene.codecs.FieldsProducer;
|
||||||
import org.apache.lucene.codecs.PostingsConsumer;
|
import org.apache.lucene.codecs.PostingsConsumer;
|
||||||
import org.apache.lucene.codecs.TermStats;
|
import org.apache.lucene.codecs.TermStats;
|
||||||
import org.apache.lucene.codecs.TermsConsumer;
|
import org.apache.lucene.codecs.TermsConsumer;
|
||||||
|
import org.apache.lucene.codecs.lucene40.Lucene40RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene41.Lucene41RWCodec;
|
||||||
|
import org.apache.lucene.codecs.lucene42.Lucene42RWCodec;
|
||||||
import org.apache.lucene.codecs.mocksep.MockSepPostingsFormat;
|
import org.apache.lucene.codecs.mocksep.MockSepPostingsFormat;
|
||||||
import org.apache.lucene.document.Document;
|
import org.apache.lucene.document.Document;
|
||||||
import org.apache.lucene.document.Field.Store;
|
import org.apache.lucene.document.Field.Store;
|
||||||
import org.apache.lucene.document.FieldType;
|
import org.apache.lucene.document.FieldType;
|
||||||
|
import org.apache.lucene.document.NumericDocValuesField;
|
||||||
import org.apache.lucene.document.StringField;
|
import org.apache.lucene.document.StringField;
|
||||||
import org.apache.lucene.document.TextField;
|
import org.apache.lucene.document.TextField;
|
||||||
import org.apache.lucene.index.FieldInfo.DocValuesType;
|
import org.apache.lucene.index.FieldInfo.DocValuesType;
|
||||||
|
@ -695,4 +699,30 @@ public class TestCodecs extends LuceneTestCase {
|
||||||
|
|
||||||
dir.close();
|
dir.close();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testDisableImpersonation() throws Exception {
|
||||||
|
Codec[] oldCodecs = new Codec[] { new Lucene40RWCodec(), new Lucene41RWCodec(), new Lucene42RWCodec() };
|
||||||
|
Directory dir = newDirectory();
|
||||||
|
IndexWriterConfig conf = newIndexWriterConfig(TEST_VERSION_CURRENT, new MockAnalyzer(random()));
|
||||||
|
conf.setCodec(oldCodecs[random().nextInt(oldCodecs.length)]);
|
||||||
|
IndexWriter writer = new IndexWriter(dir, conf);
|
||||||
|
|
||||||
|
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.close();
|
||||||
|
fail("should not have succeeded to impersonate an old format!");
|
||||||
|
} catch (UnsupportedOperationException e) {
|
||||||
|
writer.rollback();
|
||||||
|
} finally {
|
||||||
|
OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
dir.close();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.apache.lucene.codecs.DocValuesFormat;
|
||||||
import org.apache.lucene.codecs.FieldInfosFormat;
|
import org.apache.lucene.codecs.FieldInfosFormat;
|
||||||
import org.apache.lucene.codecs.FieldInfosWriter;
|
import org.apache.lucene.codecs.FieldInfosWriter;
|
||||||
import org.apache.lucene.codecs.NormsFormat;
|
import org.apache.lucene.codecs.NormsFormat;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
@ -25,11 +26,17 @@ import org.apache.lucene.codecs.NormsFormat;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/** Read-write version of Lucene40Codec for testing */
|
/** Read-write version of Lucene40Codec for testing */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public final class Lucene40RWCodec extends Lucene40Codec {
|
public final class Lucene40RWCodec extends Lucene40Codec {
|
||||||
|
|
||||||
private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat() {
|
private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat() {
|
||||||
@Override
|
@Override
|
||||||
public FieldInfosWriter getFieldInfosWriter() throws IOException {
|
public FieldInfosWriter getFieldInfosWriter() throws IOException {
|
||||||
return new Lucene40FieldInfosWriter();
|
if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
|
||||||
|
return super.getFieldInfosWriter();
|
||||||
|
} else {
|
||||||
|
return new Lucene40FieldInfosWriter();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -22,15 +22,21 @@ import java.io.IOException;
|
||||||
import org.apache.lucene.codecs.DocValuesConsumer;
|
import org.apache.lucene.codecs.DocValuesConsumer;
|
||||||
import org.apache.lucene.index.IndexFileNames;
|
import org.apache.lucene.index.IndexFileNames;
|
||||||
import org.apache.lucene.index.SegmentWriteState;
|
import org.apache.lucene.index.SegmentWriteState;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
/** Read-write version of {@link Lucene40DocValuesFormat} for testing */
|
/** Read-write version of {@link Lucene40DocValuesFormat} for testing */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class Lucene40RWDocValuesFormat extends Lucene40DocValuesFormat {
|
public class Lucene40RWDocValuesFormat extends Lucene40DocValuesFormat {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DocValuesConsumer fieldsConsumer(SegmentWriteState state) throws IOException {
|
public DocValuesConsumer fieldsConsumer(SegmentWriteState state) throws IOException {
|
||||||
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
|
if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
|
||||||
"dv",
|
return super.fieldsConsumer(state);
|
||||||
IndexFileNames.COMPOUND_FILE_EXTENSION);
|
} else {
|
||||||
return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_DV_TYPE_KEY);
|
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
|
||||||
|
"dv",
|
||||||
|
IndexFileNames.COMPOUND_FILE_EXTENSION);
|
||||||
|
return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_DV_TYPE_KEY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,15 +22,21 @@ import java.io.IOException;
|
||||||
import org.apache.lucene.codecs.DocValuesConsumer;
|
import org.apache.lucene.codecs.DocValuesConsumer;
|
||||||
import org.apache.lucene.index.IndexFileNames;
|
import org.apache.lucene.index.IndexFileNames;
|
||||||
import org.apache.lucene.index.SegmentWriteState;
|
import org.apache.lucene.index.SegmentWriteState;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
/** Read-write version of {@link Lucene40NormsFormat} for testing */
|
/** Read-write version of {@link Lucene40NormsFormat} for testing */
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class Lucene40RWNormsFormat extends Lucene40NormsFormat {
|
public class Lucene40RWNormsFormat extends Lucene40NormsFormat {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
|
public DocValuesConsumer normsConsumer(SegmentWriteState state) throws IOException {
|
||||||
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
|
if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
|
||||||
"nrm",
|
return super.normsConsumer(state);
|
||||||
IndexFileNames.COMPOUND_FILE_EXTENSION);
|
} else {
|
||||||
return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_NORM_TYPE_KEY);
|
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
|
||||||
|
"nrm",
|
||||||
|
IndexFileNames.COMPOUND_FILE_EXTENSION);
|
||||||
|
return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_NORM_TYPE_KEY);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@ import org.apache.lucene.codecs.BlockTreeTermsWriter;
|
||||||
import org.apache.lucene.codecs.FieldsConsumer;
|
import org.apache.lucene.codecs.FieldsConsumer;
|
||||||
import org.apache.lucene.codecs.PostingsWriterBase;
|
import org.apache.lucene.codecs.PostingsWriterBase;
|
||||||
import org.apache.lucene.index.SegmentWriteState;
|
import org.apache.lucene.index.SegmentWriteState;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
@ -27,23 +28,29 @@ import org.apache.lucene.index.SegmentWriteState;
|
||||||
/**
|
/**
|
||||||
* Read-write version of {@link Lucene40PostingsFormat} for testing.
|
* Read-write version of {@link Lucene40PostingsFormat} for testing.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class Lucene40RWPostingsFormat extends Lucene40PostingsFormat {
|
public class Lucene40RWPostingsFormat extends Lucene40PostingsFormat {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FieldsConsumer fieldsConsumer(SegmentWriteState state) throws IOException {
|
public FieldsConsumer fieldsConsumer(SegmentWriteState state) throws IOException {
|
||||||
PostingsWriterBase docs = new Lucene40PostingsWriter(state);
|
if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
|
||||||
|
return super.fieldsConsumer(state);
|
||||||
|
} else {
|
||||||
|
PostingsWriterBase docs = new Lucene40PostingsWriter(state);
|
||||||
|
|
||||||
// TODO: should we make the terms index more easily
|
// TODO: should we make the terms index more easily
|
||||||
// pluggable? Ie so that this codec would record which
|
// pluggable? Ie so that this codec would record which
|
||||||
// index impl was used, and switch on loading?
|
// index impl was used, and switch on loading?
|
||||||
// Or... you must make a new Codec for this?
|
// Or... you must make a new Codec for this?
|
||||||
boolean success = false;
|
boolean success = false;
|
||||||
try {
|
try {
|
||||||
FieldsConsumer ret = new BlockTreeTermsWriter(state, docs, minBlockSize, maxBlockSize);
|
FieldsConsumer ret = new BlockTreeTermsWriter(state, docs, minBlockSize, maxBlockSize);
|
||||||
success = true;
|
success = true;
|
||||||
return ret;
|
return ret;
|
||||||
} finally {
|
} finally {
|
||||||
if (!success) {
|
if (!success) {
|
||||||
docs.close();
|
docs.close();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@ import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat;
|
||||||
import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosWriter;
|
import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosWriter;
|
||||||
import org.apache.lucene.codecs.lucene40.Lucene40RWDocValuesFormat;
|
import org.apache.lucene.codecs.lucene40.Lucene40RWDocValuesFormat;
|
||||||
import org.apache.lucene.codecs.lucene40.Lucene40RWNormsFormat;
|
import org.apache.lucene.codecs.lucene40.Lucene40RWNormsFormat;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
@ -32,12 +33,17 @@ import org.apache.lucene.codecs.lucene40.Lucene40RWNormsFormat;
|
||||||
/**
|
/**
|
||||||
* Read-write version of {@link Lucene41Codec} for testing.
|
* Read-write version of {@link Lucene41Codec} for testing.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class Lucene41RWCodec extends Lucene41Codec {
|
public class Lucene41RWCodec extends Lucene41Codec {
|
||||||
private final StoredFieldsFormat fieldsFormat = new Lucene41StoredFieldsFormat();
|
private final StoredFieldsFormat fieldsFormat = new Lucene41StoredFieldsFormat();
|
||||||
private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat() {
|
private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat() {
|
||||||
@Override
|
@Override
|
||||||
public FieldInfosWriter getFieldInfosWriter() throws IOException {
|
public FieldInfosWriter getFieldInfosWriter() throws IOException {
|
||||||
return new Lucene40FieldInfosWriter();
|
if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
|
||||||
|
return super.getFieldInfosWriter();
|
||||||
|
} else {
|
||||||
|
return new Lucene40FieldInfosWriter();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -21,15 +21,21 @@ import java.io.IOException;
|
||||||
|
|
||||||
import org.apache.lucene.codecs.DocValuesConsumer;
|
import org.apache.lucene.codecs.DocValuesConsumer;
|
||||||
import org.apache.lucene.index.SegmentWriteState;
|
import org.apache.lucene.index.SegmentWriteState;
|
||||||
|
import org.apache.lucene.util.LuceneTestCase;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Read-write version of {@link Lucene42DocValuesFormat} for testing.
|
* Read-write version of {@link Lucene42DocValuesFormat} for testing.
|
||||||
*/
|
*/
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
public class Lucene42RWDocValuesFormat extends Lucene42DocValuesFormat {
|
public class Lucene42RWDocValuesFormat extends Lucene42DocValuesFormat {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public DocValuesConsumer fieldsConsumer(SegmentWriteState state) throws IOException {
|
public DocValuesConsumer fieldsConsumer(SegmentWriteState state) throws IOException {
|
||||||
// note: we choose DEFAULT here (its reasonably fast, and for small bpv has tiny waste)
|
if (!LuceneTestCase.OLD_FORMAT_IMPERSONATION_IS_ACTIVE) {
|
||||||
return new Lucene42DocValuesConsumer(state, DATA_CODEC, DATA_EXTENSION, METADATA_CODEC, METADATA_EXTENSION, acceptableOverheadRatio);
|
return super.fieldsConsumer(state);
|
||||||
|
} else {
|
||||||
|
// note: we choose DEFAULT here (its reasonably fast, and for small bpv has tiny waste)
|
||||||
|
return new Lucene42DocValuesConsumer(state, DATA_CODEC, DATA_EXTENSION, METADATA_CODEC, METADATA_EXTENSION, acceptableOverheadRatio);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -332,9 +332,13 @@ public abstract class LuceneTestCase extends Assert {
|
||||||
// -----------------------------------------------------------------
|
// -----------------------------------------------------------------
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* 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.
|
||||||
|
*
|
||||||
* @lucene.internal
|
* @lucene.internal
|
||||||
*/
|
*/
|
||||||
public static boolean PREFLEX_IMPERSONATION_IS_ACTIVE;
|
public static boolean OLD_FORMAT_IMPERSONATION_IS_ACTIVE = true;
|
||||||
|
|
||||||
|
|
||||||
// -----------------------------------------------------------------
|
// -----------------------------------------------------------------
|
||||||
|
|
Loading…
Reference in New Issue