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/10/08 13:35:20 UTC
svn commit: r1630075 [1/2] - in /lucene/dev/branches/branch_5x: ./ lucene/
lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/
lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/
lucene/backward-codecs/src/java/org/apache/...
Author: rmuir
Date: Wed Oct 8 11:35:19 2014
New Revision: 1630075
URL: http://svn.apache.org/r1630075
Log:
LUCENE-5998: Remove unnecessary infos abstractions
Added:
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWFieldInfosFormat.java
- copied unchanged from r1630072, lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWFieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWFieldInfosFormat.java
- copied unchanged from r1630072, lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWFieldInfosFormat.java
Removed:
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosWriter.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosWriter.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoWriter.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosWriter.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoWriter.java
lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosReader.java
lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosWriter.java
lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoReader.java
lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoWriter.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosReader.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosWriter.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoReader.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoWriter.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50FieldInfosReader.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50FieldInfosWriter.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoReader.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoWriter.java
Modified:
lucene/dev/branches/branch_5x/ (props changed)
lucene/dev/branches/branch_5x/lucene/ (props changed)
lucene/dev/branches/branch_5x/lucene/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40NormsReader.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWDocValuesFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWSegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java
lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46RWSegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/codecs/ (props changed)
lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/core/ (props changed)
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50FieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/lucene50/Lucene50SegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/DefaultIndexingChain.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/DocumentsWriterPerThread.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/IndexWriter.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/ReadersAndUpdates.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/SegmentCoreReaders.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/SegmentMerger.java
lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/index/SegmentReader.java
lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/index/TestIndexWriterThreadsToSegments.java
lucene/dev/branches/branch_5x/lucene/test-framework/ (props changed)
lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/ (props changed)
lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankyFieldInfosFormat.java
lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/codecs/cranky/CrankySegmentInfoFormat.java
lucene/dev/branches/branch_5x/lucene/test-framework/src/java/org/apache/lucene/index/BaseSegmentInfoFormatTestCase.java
Modified: lucene/dev/branches/branch_5x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/CHANGES.txt?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/lucene/CHANGES.txt Wed Oct 8 11:35:19 2014
@@ -136,6 +136,9 @@ API Changes
* LUCENE-5992: Remove FieldInfos from SegmentInfosWriter.write API. (Robert Muir, Mike McCandless)
+* LUCENE-5998: Simplify Field/SegmentInfoFormat to read+write methods.
+ (Robert Muir)
+
Bug Fixes
* LUCENE-5650: Enforce read-only access to any path outside the temporary
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesFormat.java Wed Oct 8 11:35:19 2014
@@ -51,7 +51,7 @@ public class Lucene40DocValuesFormat ext
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
"dv",
Lucene40CompoundFormat.COMPOUND_FILE_EXTENSION);
- return new Lucene40DocValuesReader(state, filename, Lucene40FieldInfosReader.LEGACY_DV_TYPE_KEY);
+ return new Lucene40DocValuesReader(state, filename, Lucene40FieldInfosFormat.LEGACY_DV_TYPE_KEY);
}
// constants for VAR_INTS
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40DocValuesReader.java Wed Oct 8 11:35:19 2014
@@ -24,7 +24,7 @@ import java.util.concurrent.atomic.Atomi
import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.DocValuesProducer;
-import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosReader.LegacyDocValuesType;
+import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat.LegacyDocValuesType;
import org.apache.lucene.index.BinaryDocValues;
import org.apache.lucene.index.CorruptIndexException;
import org.apache.lucene.index.FieldInfo;
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40FieldInfosFormat.java Wed Oct 8 11:35:19 2014
@@ -18,10 +18,22 @@ package org.apache.lucene.codecs.lucene4
*/
import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.FieldInfosReader;
-import org.apache.lucene.codecs.FieldInfosWriter;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.FieldInfo;
+import org.apache.lucene.index.FieldInfos;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.index.FieldInfo.DocValuesType;
+import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.util.IOUtils;
/**
* Lucene 4.0 Field Infos format.
@@ -29,22 +41,119 @@ import org.apache.lucene.codecs.FieldInf
*/
@Deprecated
public class Lucene40FieldInfosFormat extends FieldInfosFormat {
- private final FieldInfosReader reader = new Lucene40FieldInfosReader();
/** Sole constructor. */
public Lucene40FieldInfosFormat() {
}
@Override
- public final FieldInfosReader getFieldInfosReader() throws IOException {
- return reader;
- }
+ public final FieldInfos read(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, IOContext iocontext) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segmentInfo.name, "", Lucene40FieldInfosFormat.FIELD_INFOS_EXTENSION);
+ IndexInput input = directory.openInput(fileName, iocontext);
+
+ boolean success = false;
+ try {
+ CodecUtil.checkHeader(input, Lucene40FieldInfosFormat.CODEC_NAME,
+ Lucene40FieldInfosFormat.FORMAT_START,
+ Lucene40FieldInfosFormat.FORMAT_CURRENT);
+
+ final int size = input.readVInt(); //read in the size
+ FieldInfo infos[] = new FieldInfo[size];
+
+ for (int i = 0; i < size; i++) {
+ String name = input.readString();
+ final int fieldNumber = input.readVInt();
+ byte bits = input.readByte();
+ boolean isIndexed = (bits & Lucene40FieldInfosFormat.IS_INDEXED) != 0;
+ boolean storeTermVector = (bits & Lucene40FieldInfosFormat.STORE_TERMVECTOR) != 0;
+ boolean omitNorms = (bits & Lucene40FieldInfosFormat.OMIT_NORMS) != 0;
+ boolean storePayloads = (bits & Lucene40FieldInfosFormat.STORE_PAYLOADS) != 0;
+ final IndexOptions indexOptions;
+ if (!isIndexed) {
+ indexOptions = null;
+ } else if ((bits & Lucene40FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS) != 0) {
+ indexOptions = IndexOptions.DOCS_ONLY;
+ } else if ((bits & Lucene40FieldInfosFormat.OMIT_POSITIONS) != 0) {
+ indexOptions = IndexOptions.DOCS_AND_FREQS;
+ } else if ((bits & Lucene40FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS) != 0) {
+ indexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS;
+ } else {
+ indexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS;
+ }
+
+ // LUCENE-3027: past indices were able to write
+ // storePayloads=true when omitTFAP is also true,
+ // which is invalid. We correct that, here:
+ if (isIndexed && indexOptions.compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) < 0) {
+ storePayloads = false;
+ }
+ // DV Types are packed in one byte
+ byte val = input.readByte();
+ final LegacyDocValuesType oldValuesType = getDocValuesType((byte) (val & 0x0F));
+ final LegacyDocValuesType oldNormsType = getDocValuesType((byte) ((val >>> 4) & 0x0F));
+ final Map<String,String> attributes = input.readStringStringMap();;
+ if (oldValuesType.mapping != null) {
+ attributes.put(LEGACY_DV_TYPE_KEY, oldValuesType.name());
+ }
+ if (oldNormsType.mapping != null) {
+ if (oldNormsType.mapping != DocValuesType.NUMERIC) {
+ throw new CorruptIndexException("invalid norm type: " + oldNormsType, input);
+ }
+ attributes.put(LEGACY_NORM_TYPE_KEY, oldNormsType.name());
+ }
+ infos[i] = new FieldInfo(name, isIndexed, fieldNumber, storeTermVector,
+ omitNorms, storePayloads, indexOptions, oldValuesType.mapping, oldNormsType.mapping, -1, Collections.unmodifiableMap(attributes));
+ }
+ CodecUtil.checkEOF(input);
+ FieldInfos fieldInfos = new FieldInfos(infos);
+ success = true;
+ return fieldInfos;
+ } finally {
+ if (success) {
+ input.close();
+ } else {
+ IOUtils.closeWhileHandlingException(input);
+ }
+ }
+ }
+
+ static final String LEGACY_DV_TYPE_KEY = Lucene40FieldInfosFormat.class.getSimpleName() + ".dvtype";
+ static final String LEGACY_NORM_TYPE_KEY = Lucene40FieldInfosFormat.class.getSimpleName() + ".normtype";
+
+ // mapping of 4.0 types -> 4.2 types
+ static enum LegacyDocValuesType {
+ NONE(null),
+ VAR_INTS(DocValuesType.NUMERIC),
+ FLOAT_32(DocValuesType.NUMERIC),
+ FLOAT_64(DocValuesType.NUMERIC),
+ BYTES_FIXED_STRAIGHT(DocValuesType.BINARY),
+ BYTES_FIXED_DEREF(DocValuesType.BINARY),
+ BYTES_VAR_STRAIGHT(DocValuesType.BINARY),
+ BYTES_VAR_DEREF(DocValuesType.BINARY),
+ FIXED_INTS_16(DocValuesType.NUMERIC),
+ FIXED_INTS_32(DocValuesType.NUMERIC),
+ FIXED_INTS_64(DocValuesType.NUMERIC),
+ FIXED_INTS_8(DocValuesType.NUMERIC),
+ BYTES_FIXED_SORTED(DocValuesType.SORTED),
+ BYTES_VAR_SORTED(DocValuesType.SORTED);
+
+ final DocValuesType mapping;
+ LegacyDocValuesType(DocValuesType mapping) {
+ this.mapping = mapping;
+ }
+ }
+
+ // decodes a 4.0 type
+ private static LegacyDocValuesType getDocValuesType(byte b) {
+ return LegacyDocValuesType.values()[b];
+ }
+
@Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
+ public void write(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, FieldInfos infos, IOContext context) throws IOException {
throw new UnsupportedOperationException("this codec can only be used for reading");
}
-
+
/** Extension of field infos */
static final String FIELD_INFOS_EXTENSION = "fnm";
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40NormsReader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40NormsReader.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40NormsReader.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40NormsReader.java Wed Oct 8 11:35:19 2014
@@ -40,7 +40,7 @@ final class Lucene40NormsReader extends
}
Lucene40NormsReader(SegmentReadState state, String filename) throws IOException {
- impl = new Lucene40DocValuesReader(state, filename, Lucene40FieldInfosReader.LEGACY_NORM_TYPE_KEY);
+ impl = new Lucene40DocValuesReader(state, filename, Lucene40FieldInfosFormat.LEGACY_NORM_TYPE_KEY);
}
@Override
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene40/Lucene40SegmentInfoFormat.java Wed Oct 8 11:35:19 2014
@@ -17,10 +17,21 @@ package org.apache.lucene.codecs.lucene4
* limitations under the License.
*/
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.SegmentInfoReader;
-import org.apache.lucene.codecs.SegmentInfoWriter;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.Version;
/**
* Lucene 4.0 Segment info format.
@@ -28,19 +39,55 @@ import org.apache.lucene.index.SegmentIn
*/
@Deprecated
public class Lucene40SegmentInfoFormat extends SegmentInfoFormat {
- private final SegmentInfoReader reader = new Lucene40SegmentInfoReader();
/** Sole constructor. */
public Lucene40SegmentInfoFormat() {
}
@Override
- public final SegmentInfoReader getSegmentInfoReader() {
- return reader;
+ public final SegmentInfo read(Directory dir, String segment, IOContext context) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segment, "", Lucene40SegmentInfoFormat.SI_EXTENSION);
+ final IndexInput input = dir.openInput(fileName, context);
+ boolean success = false;
+ try {
+ CodecUtil.checkHeader(input, Lucene40SegmentInfoFormat.CODEC_NAME,
+ Lucene40SegmentInfoFormat.VERSION_START,
+ Lucene40SegmentInfoFormat.VERSION_CURRENT);
+ final Version version;
+ try {
+ version = Version.parse(input.readString());
+ } catch (ParseException pe) {
+ throw new CorruptIndexException("unable to parse version string: " + pe.getMessage(), input, pe);
+ }
+ final int docCount = input.readInt();
+ if (docCount < 0) {
+ throw new CorruptIndexException("invalid docCount: " + docCount, input);
+ }
+ final boolean isCompoundFile = input.readByte() == SegmentInfo.YES;
+ final Map<String,String> diagnostics = input.readStringStringMap();
+ input.readStringStringMap(); // read deprecated attributes
+ final Set<String> files = input.readStringSet();
+
+ CodecUtil.checkEOF(input);
+
+ final SegmentInfo si = new SegmentInfo(dir, version, segment, docCount, isCompoundFile, null, diagnostics, null);
+ si.setFiles(files);
+
+ success = true;
+
+ return si;
+
+ } finally {
+ if (!success) {
+ IOUtils.closeWhileHandlingException(input);
+ } else {
+ input.close();
+ }
+ }
}
@Override
- public SegmentInfoWriter getSegmentInfoWriter() {
+ public void write(Directory dir, SegmentInfo info, IOContext ioContext) throws IOException {
throw new UnsupportedOperationException("this codec can only be used for reading");
}
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene42/Lucene42FieldInfosFormat.java Wed Oct 8 11:35:19 2014
@@ -18,10 +18,22 @@ package org.apache.lucene.codecs.lucene4
*/
import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.FieldInfosReader;
-import org.apache.lucene.codecs.FieldInfosWriter;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.FieldInfo;
+import org.apache.lucene.index.FieldInfos;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.index.FieldInfo.DocValuesType;
+import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.util.IOUtils;
/**
* Lucene 4.2 Field Infos format.
@@ -29,22 +41,89 @@ import org.apache.lucene.codecs.FieldInf
*/
@Deprecated
public class Lucene42FieldInfosFormat extends FieldInfosFormat {
- private final FieldInfosReader reader = new Lucene42FieldInfosReader();
/** Sole constructor. */
public Lucene42FieldInfosFormat() {
}
@Override
- public final FieldInfosReader getFieldInfosReader() throws IOException {
- return reader;
- }
+ public FieldInfos read(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, IOContext iocontext) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segmentInfo.name, "", Lucene42FieldInfosFormat.EXTENSION);
+ IndexInput input = directory.openInput(fileName, iocontext);
+
+ boolean success = false;
+ try {
+ CodecUtil.checkHeader(input, Lucene42FieldInfosFormat.CODEC_NAME,
+ Lucene42FieldInfosFormat.FORMAT_START,
+ Lucene42FieldInfosFormat.FORMAT_CURRENT);
+
+ final int size = input.readVInt(); //read in the size
+ FieldInfo infos[] = new FieldInfo[size];
+
+ for (int i = 0; i < size; i++) {
+ String name = input.readString();
+ final int fieldNumber = input.readVInt();
+ byte bits = input.readByte();
+ boolean isIndexed = (bits & Lucene42FieldInfosFormat.IS_INDEXED) != 0;
+ boolean storeTermVector = (bits & Lucene42FieldInfosFormat.STORE_TERMVECTOR) != 0;
+ boolean omitNorms = (bits & Lucene42FieldInfosFormat.OMIT_NORMS) != 0;
+ boolean storePayloads = (bits & Lucene42FieldInfosFormat.STORE_PAYLOADS) != 0;
+ final IndexOptions indexOptions;
+ if (!isIndexed) {
+ indexOptions = null;
+ } else if ((bits & Lucene42FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS) != 0) {
+ indexOptions = IndexOptions.DOCS_ONLY;
+ } else if ((bits & Lucene42FieldInfosFormat.OMIT_POSITIONS) != 0) {
+ indexOptions = IndexOptions.DOCS_AND_FREQS;
+ } else if ((bits & Lucene42FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS) != 0) {
+ indexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS;
+ } else {
+ indexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS;
+ }
+ // DV Types are packed in one byte
+ byte val = input.readByte();
+ final DocValuesType docValuesType = getDocValuesType(input, (byte) (val & 0x0F));
+ final DocValuesType normsType = getDocValuesType(input, (byte) ((val >>> 4) & 0x0F));
+ final Map<String,String> attributes = input.readStringStringMap();
+ infos[i] = new FieldInfo(name, isIndexed, fieldNumber, storeTermVector,
+ omitNorms, storePayloads, indexOptions, docValuesType, normsType, -1, Collections.unmodifiableMap(attributes));
+ }
+
+ CodecUtil.checkEOF(input);
+ FieldInfos fieldInfos = new FieldInfos(infos);
+ success = true;
+ return fieldInfos;
+ } finally {
+ if (success) {
+ input.close();
+ } else {
+ IOUtils.closeWhileHandlingException(input);
+ }
+ }
+ }
+
+ private static DocValuesType getDocValuesType(IndexInput input, byte b) throws IOException {
+ if (b == 0) {
+ return null;
+ } else if (b == 1) {
+ return DocValuesType.NUMERIC;
+ } else if (b == 2) {
+ return DocValuesType.BINARY;
+ } else if (b == 3) {
+ return DocValuesType.SORTED;
+ } else if (b == 4) {
+ return DocValuesType.SORTED_SET;
+ } else {
+ throw new CorruptIndexException("invalid docvalues byte: " + b, input);
+ }
+ }
+
@Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
+ public void write(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, FieldInfos infos, IOContext context) throws IOException {
throw new UnsupportedOperationException("this codec can only be used for reading");
}
-
+
/** Extension of field infos */
static final String EXTENSION = "fnm";
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46FieldInfosFormat.java Wed Oct 8 11:35:19 2014
@@ -18,10 +18,23 @@ package org.apache.lucene.codecs.lucene4
*/
import java.io.IOException;
+import java.util.Collections;
+import java.util.Map;
+import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.FieldInfosReader;
-import org.apache.lucene.codecs.FieldInfosWriter;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.FieldInfo;
+import org.apache.lucene.index.FieldInfos;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.index.FieldInfo.DocValuesType;
+import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.store.ChecksumIndexInput;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.IndexOutput;
/**
* Lucene 4.6 Field Infos format.
@@ -29,21 +42,139 @@ import org.apache.lucene.codecs.FieldInf
*/
@Deprecated
public final class Lucene46FieldInfosFormat extends FieldInfosFormat {
- private final FieldInfosReader reader = new Lucene46FieldInfosReader();
- private final FieldInfosWriter writer = new Lucene46FieldInfosWriter();
/** Sole constructor. */
public Lucene46FieldInfosFormat() {
}
@Override
- public final FieldInfosReader getFieldInfosReader() throws IOException {
- return reader;
+ public FieldInfos read(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, IOContext context) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segmentInfo.name, segmentSuffix, Lucene46FieldInfosFormat.EXTENSION);
+ try (ChecksumIndexInput input = directory.openChecksumInput(fileName, context)) {
+ int codecVersion = CodecUtil.checkHeader(input, Lucene46FieldInfosFormat.CODEC_NAME,
+ Lucene46FieldInfosFormat.FORMAT_START,
+ Lucene46FieldInfosFormat.FORMAT_CURRENT);
+
+ final int size = input.readVInt(); //read in the size
+ FieldInfo infos[] = new FieldInfo[size];
+
+ for (int i = 0; i < size; i++) {
+ String name = input.readString();
+ final int fieldNumber = input.readVInt();
+ if (fieldNumber < 0) {
+ throw new CorruptIndexException("invalid field number for field: " + name + ", fieldNumber=" + fieldNumber, input);
+ }
+ byte bits = input.readByte();
+ boolean isIndexed = (bits & Lucene46FieldInfosFormat.IS_INDEXED) != 0;
+ boolean storeTermVector = (bits & Lucene46FieldInfosFormat.STORE_TERMVECTOR) != 0;
+ boolean omitNorms = (bits & Lucene46FieldInfosFormat.OMIT_NORMS) != 0;
+ boolean storePayloads = (bits & Lucene46FieldInfosFormat.STORE_PAYLOADS) != 0;
+ final IndexOptions indexOptions;
+ if (!isIndexed) {
+ indexOptions = null;
+ } else if ((bits & Lucene46FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS) != 0) {
+ indexOptions = IndexOptions.DOCS_ONLY;
+ } else if ((bits & Lucene46FieldInfosFormat.OMIT_POSITIONS) != 0) {
+ indexOptions = IndexOptions.DOCS_AND_FREQS;
+ } else if ((bits & Lucene46FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS) != 0) {
+ indexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS;
+ } else {
+ indexOptions = IndexOptions.DOCS_AND_FREQS_AND_POSITIONS;
+ }
+
+ // DV Types are packed in one byte
+ byte val = input.readByte();
+ final DocValuesType docValuesType = getDocValuesType(input, (byte) (val & 0x0F));
+ final DocValuesType normsType = getDocValuesType(input, (byte) ((val >>> 4) & 0x0F));
+ final long dvGen = input.readLong();
+ final Map<String,String> attributes = input.readStringStringMap();
+ infos[i] = new FieldInfo(name, isIndexed, fieldNumber, storeTermVector,
+ omitNorms, storePayloads, indexOptions, docValuesType, normsType, dvGen, Collections.unmodifiableMap(attributes));
+ }
+
+ if (codecVersion >= Lucene46FieldInfosFormat.FORMAT_CHECKSUM) {
+ CodecUtil.checkFooter(input);
+ } else {
+ CodecUtil.checkEOF(input);
+ }
+ return new FieldInfos(infos);
+ }
+ }
+
+ private static DocValuesType getDocValuesType(IndexInput input, byte b) throws IOException {
+ if (b == 0) {
+ return null;
+ } else if (b == 1) {
+ return DocValuesType.NUMERIC;
+ } else if (b == 2) {
+ return DocValuesType.BINARY;
+ } else if (b == 3) {
+ return DocValuesType.SORTED;
+ } else if (b == 4) {
+ return DocValuesType.SORTED_SET;
+ } else if (b == 5) {
+ return DocValuesType.SORTED_NUMERIC;
+ } else {
+ throw new CorruptIndexException("invalid docvalues byte: " + b, input);
+ }
}
@Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
- return writer;
+ public void write(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, FieldInfos infos, IOContext context) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segmentInfo.name, segmentSuffix, Lucene46FieldInfosFormat.EXTENSION);
+ try (IndexOutput output = directory.createOutput(fileName, context)) {
+ CodecUtil.writeHeader(output, Lucene46FieldInfosFormat.CODEC_NAME, Lucene46FieldInfosFormat.FORMAT_CURRENT);
+ output.writeVInt(infos.size());
+ for (FieldInfo fi : infos) {
+ IndexOptions indexOptions = fi.getIndexOptions();
+ byte bits = 0x0;
+ if (fi.hasVectors()) bits |= Lucene46FieldInfosFormat.STORE_TERMVECTOR;
+ if (fi.omitsNorms()) bits |= Lucene46FieldInfosFormat.OMIT_NORMS;
+ if (fi.hasPayloads()) bits |= Lucene46FieldInfosFormat.STORE_PAYLOADS;
+ if (fi.isIndexed()) {
+ bits |= Lucene46FieldInfosFormat.IS_INDEXED;
+ assert indexOptions.compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0 || !fi.hasPayloads();
+ if (indexOptions == IndexOptions.DOCS_ONLY) {
+ bits |= Lucene46FieldInfosFormat.OMIT_TERM_FREQ_AND_POSITIONS;
+ } else if (indexOptions == IndexOptions.DOCS_AND_FREQS_AND_POSITIONS_AND_OFFSETS) {
+ bits |= Lucene46FieldInfosFormat.STORE_OFFSETS_IN_POSTINGS;
+ } else if (indexOptions == IndexOptions.DOCS_AND_FREQS) {
+ bits |= Lucene46FieldInfosFormat.OMIT_POSITIONS;
+ }
+ }
+ output.writeString(fi.name);
+ output.writeVInt(fi.number);
+ output.writeByte(bits);
+
+ // pack the DV types in one byte
+ final byte dv = docValuesByte(fi.getDocValuesType());
+ final byte nrm = docValuesByte(fi.getNormType());
+ assert (dv & (~0xF)) == 0 && (nrm & (~0x0F)) == 0;
+ byte val = (byte) (0xff & ((nrm << 4) | dv));
+ output.writeByte(val);
+ output.writeLong(fi.getDocValuesGen());
+ output.writeStringStringMap(fi.attributes());
+ }
+ CodecUtil.writeFooter(output);
+ }
+ }
+
+ private static byte docValuesByte(DocValuesType type) {
+ if (type == null) {
+ return 0;
+ } else if (type == DocValuesType.NUMERIC) {
+ return 1;
+ } else if (type == DocValuesType.BINARY) {
+ return 2;
+ } else if (type == DocValuesType.SORTED) {
+ return 3;
+ } else if (type == DocValuesType.SORTED_SET) {
+ return 4;
+ } else if (type == DocValuesType.SORTED_NUMERIC) {
+ return 5;
+ } else {
+ throw new AssertionError();
+ }
}
/** Extension of field infos */
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/java/org/apache/lucene/codecs/lucene46/Lucene46SegmentInfoFormat.java Wed Oct 8 11:35:19 2014
@@ -17,10 +17,20 @@ package org.apache.lucene.codecs.lucene4
* limitations under the License.
*/
+import java.io.IOException;
+import java.text.ParseException;
+import java.util.Map;
+import java.util.Set;
+
+import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.SegmentInfoReader;
-import org.apache.lucene.codecs.SegmentInfoWriter;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.ChecksumIndexInput;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.util.Version;
/**
* Lucene 4.6 Segment info format.
@@ -28,19 +38,48 @@ import org.apache.lucene.index.SegmentIn
*/
@Deprecated
public class Lucene46SegmentInfoFormat extends SegmentInfoFormat {
- private final SegmentInfoReader reader = new Lucene46SegmentInfoReader();
/** Sole constructor. */
public Lucene46SegmentInfoFormat() {
}
@Override
- public final SegmentInfoReader getSegmentInfoReader() {
- return reader;
+ public SegmentInfo read(Directory dir, String segment, IOContext context) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segment, "", Lucene46SegmentInfoFormat.SI_EXTENSION);
+ try (ChecksumIndexInput input = dir.openChecksumInput(fileName, context)) {
+ int codecVersion = CodecUtil.checkHeader(input, Lucene46SegmentInfoFormat.CODEC_NAME,
+ Lucene46SegmentInfoFormat.VERSION_START,
+ Lucene46SegmentInfoFormat.VERSION_CURRENT);
+ final Version version;
+ try {
+ version = Version.parse(input.readString());
+ } catch (ParseException pe) {
+ throw new CorruptIndexException("unable to parse version string: " + pe.getMessage(), input, pe);
+ }
+
+ final int docCount = input.readInt();
+ if (docCount < 0) {
+ throw new CorruptIndexException("invalid docCount: " + docCount, input);
+ }
+ final boolean isCompoundFile = input.readByte() == SegmentInfo.YES;
+ final Map<String,String> diagnostics = input.readStringStringMap();
+ final Set<String> files = input.readStringSet();
+
+ if (codecVersion >= Lucene46SegmentInfoFormat.VERSION_CHECKSUM) {
+ CodecUtil.checkFooter(input);
+ } else {
+ CodecUtil.checkEOF(input);
+ }
+
+ final SegmentInfo si = new SegmentInfo(dir, version, segment, docCount, isCompoundFile, null, diagnostics, null);
+ si.setFiles(files);
+
+ return si;
+ }
}
@Override
- public SegmentInfoWriter getSegmentInfoWriter() {
+ public void write(Directory dir, SegmentInfo info, IOContext ioContext) throws IOException {
throw new UnsupportedOperationException("this codec can only be used for reading");
}
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40DocValuesWriter.java Wed Oct 8 11:35:19 2014
@@ -25,7 +25,7 @@ import java.util.TreeSet;
import org.apache.lucene.codecs.CodecUtil;
import org.apache.lucene.codecs.DocValuesConsumer;
import org.apache.lucene.codecs.MissingOrdRemapper;
-import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosReader.LegacyDocValuesType;
+import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosFormat.LegacyDocValuesType;
import org.apache.lucene.index.FieldInfo;
import org.apache.lucene.index.IndexFileNames;
import org.apache.lucene.index.SegmentWriteState;
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWCodec.java Wed Oct 8 11:35:19 2014
@@ -4,7 +4,6 @@ import java.io.IOException;
import org.apache.lucene.codecs.DocValuesFormat;
import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.FieldInfosWriter;
import org.apache.lucene.codecs.NormsFormat;
import org.apache.lucene.codecs.PostingsFormat;
import org.apache.lucene.codecs.SegmentInfoFormat;
@@ -35,13 +34,7 @@ import org.apache.lucene.codecs.TermVect
@Deprecated
public final class Lucene40RWCodec extends Lucene40Codec {
- private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat() {
- @Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
- return new Lucene40FieldInfosWriter();
- }
- };
-
+ private final FieldInfosFormat fieldInfos = new Lucene40RWFieldInfosFormat();
private final DocValuesFormat docValues = new Lucene40RWDocValuesFormat();
private final NormsFormat norms = new Lucene40RWNormsFormat();
private final StoredFieldsFormat stored = new Lucene40RWStoredFieldsFormat();
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWDocValuesFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWDocValuesFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWDocValuesFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWDocValuesFormat.java Wed Oct 8 11:35:19 2014
@@ -35,6 +35,6 @@ public final class Lucene40RWDocValuesFo
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
"dv",
Lucene40CompoundFormat.COMPOUND_FILE_EXTENSION);
- return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_DV_TYPE_KEY);
+ return new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosFormat.LEGACY_DV_TYPE_KEY);
}
}
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWNormsFormat.java Wed Oct 8 11:35:19 2014
@@ -36,7 +36,7 @@ public final class Lucene40RWNormsFormat
String filename = IndexFileNames.segmentFileName(state.segmentInfo.name,
"nrm",
Lucene40CompoundFormat.COMPOUND_FILE_EXTENSION);
- final Lucene40DocValuesWriter impl = new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosReader.LEGACY_NORM_TYPE_KEY);
+ final Lucene40DocValuesWriter impl = new Lucene40DocValuesWriter(state, filename, Lucene40FieldInfosFormat.LEGACY_NORM_TYPE_KEY);
return new NormsConsumer() {
@Override
public void addNormsField(FieldInfo field, Iterable<Number> values) throws IOException {
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWSegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWSegmentInfoFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWSegmentInfoFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene40/Lucene40RWSegmentInfoFormat.java Wed Oct 8 11:35:19 2014
@@ -17,7 +17,16 @@ package org.apache.lucene.codecs.lucene4
* limitations under the License.
*/
-import org.apache.lucene.codecs.SegmentInfoWriter;
+import java.io.IOException;
+import java.util.Collections;
+
+import org.apache.lucene.codecs.CodecUtil;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexOutput;
+import org.apache.lucene.util.IOUtils;
/**
* Read-write version of 4.0 segmentinfo format for testing
@@ -27,7 +36,33 @@ import org.apache.lucene.codecs.SegmentI
public final class Lucene40RWSegmentInfoFormat extends Lucene40SegmentInfoFormat {
@Override
- public SegmentInfoWriter getSegmentInfoWriter() {
- return new Lucene40SegmentInfoWriter();
+ public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(si.name, "", Lucene40SegmentInfoFormat.SI_EXTENSION);
+ si.addFile(fileName);
+
+ final IndexOutput output = dir.createOutput(fileName, ioContext);
+
+ boolean success = false;
+ try {
+ CodecUtil.writeHeader(output, Lucene40SegmentInfoFormat.CODEC_NAME, Lucene40SegmentInfoFormat.VERSION_CURRENT);
+ // Write the Lucene version that created this segment, since 3.1
+ output.writeString(si.getVersion().toString());
+ output.writeInt(si.getDocCount());
+
+ output.writeByte((byte) (si.getUseCompoundFile() ? SegmentInfo.YES : SegmentInfo.NO));
+ output.writeStringStringMap(si.getDiagnostics());
+ output.writeStringStringMap(Collections.<String,String>emptyMap());
+ output.writeStringSet(si.files());
+
+ success = true;
+ } finally {
+ if (!success) {
+ IOUtils.closeWhileHandlingException(output);
+ // TODO: why must we do this? do we not get tracking dir wrapper?
+ IOUtils.deleteFilesIgnoringExceptions(si.dir, fileName);
+ } else {
+ output.close();
+ }
+ }
}
}
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene41/Lucene41RWCodec.java Wed Oct 8 11:35:19 2014
@@ -1,17 +1,13 @@
package org.apache.lucene.codecs.lucene41;
-import java.io.IOException;
-
import org.apache.lucene.codecs.DocValuesFormat;
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.codecs.lucene40.Lucene40FieldInfosFormat;
-import org.apache.lucene.codecs.lucene40.Lucene40FieldInfosWriter;
import org.apache.lucene.codecs.lucene40.Lucene40RWDocValuesFormat;
+import org.apache.lucene.codecs.lucene40.Lucene40RWFieldInfosFormat;
import org.apache.lucene.codecs.lucene40.Lucene40RWNormsFormat;
import org.apache.lucene.codecs.lucene40.Lucene40RWSegmentInfoFormat;
import org.apache.lucene.codecs.lucene40.Lucene40RWTermVectorsFormat;
@@ -40,13 +36,7 @@ import org.apache.lucene.codecs.lucene40
@Deprecated
public final class Lucene41RWCodec extends Lucene41Codec {
private final StoredFieldsFormat fieldsFormat = new Lucene41RWStoredFieldsFormat();
- private final FieldInfosFormat fieldInfos = new Lucene40FieldInfosFormat() {
- @Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
- return new Lucene40FieldInfosWriter();
- }
- };
-
+ private final FieldInfosFormat fieldInfos = new Lucene40RWFieldInfosFormat();
private final DocValuesFormat docValues = new Lucene40RWDocValuesFormat();
private final NormsFormat norms = new Lucene40RWNormsFormat();
private final TermVectorsFormat vectors = new Lucene40RWTermVectorsFormat();
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene42/Lucene42RWCodec.java Wed Oct 8 11:35:19 2014
@@ -17,11 +17,8 @@ package org.apache.lucene.codecs.lucene4
* limitations under the License.
*/
-import java.io.IOException;
-
import org.apache.lucene.codecs.DocValuesFormat;
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;
@@ -39,13 +36,7 @@ public final class Lucene42RWCodec exten
private static final DocValuesFormat dv = new Lucene42RWDocValuesFormat();
private static final NormsFormat norms = new Lucene42RWNormsFormat();
private static final StoredFieldsFormat storedFields = new Lucene41RWStoredFieldsFormat();
-
- private final FieldInfosFormat fieldInfosFormat = new Lucene42FieldInfosFormat() {
- @Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
- return new Lucene42FieldInfosWriter();
- }
- };
+ private static final FieldInfosFormat fieldInfosFormat = new Lucene42RWFieldInfosFormat();
@Override
public DocValuesFormat getDocValuesFormatForField(String field) {
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene45/Lucene45RWCodec.java Wed Oct 8 11:35:19 2014
@@ -17,19 +17,15 @@ package org.apache.lucene.codecs.lucene4
* limitations under the License.
*/
-import java.io.IOException;
-
import org.apache.lucene.codecs.DocValuesFormat;
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.codecs.lucene40.Lucene40RWSegmentInfoFormat;
import org.apache.lucene.codecs.lucene41.Lucene41RWStoredFieldsFormat;
-import org.apache.lucene.codecs.lucene42.Lucene42FieldInfosFormat;
-import org.apache.lucene.codecs.lucene42.Lucene42FieldInfosWriter;
+import org.apache.lucene.codecs.lucene42.Lucene42RWFieldInfosFormat;
import org.apache.lucene.codecs.lucene42.Lucene42RWNormsFormat;
import org.apache.lucene.codecs.lucene42.Lucene42RWTermVectorsFormat;
@@ -39,12 +35,7 @@ import org.apache.lucene.codecs.lucene42
@SuppressWarnings("deprecation")
public final class Lucene45RWCodec extends Lucene45Codec {
- private final FieldInfosFormat fieldInfosFormat = new Lucene42FieldInfosFormat() {
- @Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
- return new Lucene42FieldInfosWriter();
- }
- };
+ private static final FieldInfosFormat fieldInfosFormat = new Lucene42RWFieldInfosFormat();
@Override
public FieldInfosFormat fieldInfosFormat() {
Modified: lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46RWSegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46RWSegmentInfoFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46RWSegmentInfoFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene46/Lucene46RWSegmentInfoFormat.java Wed Oct 8 11:35:19 2014
@@ -17,7 +17,16 @@ package org.apache.lucene.codecs.lucene4
* limitations under the License.
*/
-import org.apache.lucene.codecs.SegmentInfoWriter;
+import java.io.IOException;
+
+import org.apache.lucene.codecs.CodecUtil;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
+import org.apache.lucene.store.IndexOutput;
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.Version;
/**
* Read-Write version of 4.6 segmentinfo format for testing
@@ -26,7 +35,36 @@ import org.apache.lucene.codecs.SegmentI
@Deprecated
public final class Lucene46RWSegmentInfoFormat extends Lucene46SegmentInfoFormat {
@Override
- public SegmentInfoWriter getSegmentInfoWriter() {
- return new Lucene46SegmentInfoWriter();
+ public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(si.name, "", Lucene46SegmentInfoFormat.SI_EXTENSION);
+ si.addFile(fileName);
+
+ final IndexOutput output = dir.createOutput(fileName, ioContext);
+
+ boolean success = false;
+ try {
+ CodecUtil.writeHeader(output, Lucene46SegmentInfoFormat.CODEC_NAME, Lucene46SegmentInfoFormat.VERSION_CURRENT);
+ Version version = si.getVersion();
+ if (version.major < 4) {
+ throw new IllegalArgumentException("invalid major version: should be >= 4 but got: " + version.major + " segment=" + si);
+ }
+ // Write the Lucene version that created this segment, since 3.1
+ output.writeString(version.toString());
+ output.writeInt(si.getDocCount());
+
+ output.writeByte((byte) (si.getUseCompoundFile() ? SegmentInfo.YES : SegmentInfo.NO));
+ output.writeStringStringMap(si.getDiagnostics());
+ output.writeStringSet(si.files());
+ CodecUtil.writeFooter(output);
+ success = true;
+ } finally {
+ if (!success) {
+ IOUtils.closeWhileHandlingException(output);
+ // TODO: are we doing this outside of the tracking wrapper? why must SIWriter cleanup like this?
+ IOUtils.deleteFilesIgnoringExceptions(si.dir, fileName);
+ } else {
+ output.close();
+ }
+ }
}
}
Modified: lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextFieldInfosFormat.java Wed Oct 8 11:35:19 2014
@@ -18,10 +18,26 @@ package org.apache.lucene.codecs.simplet
*/
import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.lucene.codecs.FieldInfosFormat;
-import org.apache.lucene.codecs.FieldInfosReader;
-import org.apache.lucene.codecs.FieldInfosWriter;
+import org.apache.lucene.index.FieldInfo;
+import org.apache.lucene.index.FieldInfos;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.index.FieldInfo.DocValuesType;
+import org.apache.lucene.index.FieldInfo.IndexOptions;
+import org.apache.lucene.store.ChecksumIndexInput;
+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.BytesRefBuilder;
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.StringHelper;
/**
* plaintext field infos format
@@ -30,16 +46,220 @@ import org.apache.lucene.codecs.FieldInf
* @lucene.experimental
*/
public class SimpleTextFieldInfosFormat extends FieldInfosFormat {
- private final FieldInfosReader reader = new SimpleTextFieldInfosReader();
- private final FieldInfosWriter writer = new SimpleTextFieldInfosWriter();
-
+
+ /** Extension of field infos */
+ static final String FIELD_INFOS_EXTENSION = "inf";
+
+ static final BytesRef NUMFIELDS = new BytesRef("number of fields ");
+ static final BytesRef NAME = new BytesRef(" name ");
+ static final BytesRef NUMBER = new BytesRef(" number ");
+ static final BytesRef ISINDEXED = new BytesRef(" indexed ");
+ static final BytesRef STORETV = new BytesRef(" term vectors ");
+ static final BytesRef STORETVPOS = new BytesRef(" term vector positions ");
+ static final BytesRef STORETVOFF = new BytesRef(" term vector offsets ");
+ static final BytesRef PAYLOADS = new BytesRef(" payloads ");
+ static final BytesRef NORMS = new BytesRef(" norms ");
+ static final BytesRef NORMS_TYPE = new BytesRef(" norms type ");
+ static final BytesRef DOCVALUES = new BytesRef(" doc values ");
+ static final BytesRef DOCVALUES_GEN = new BytesRef(" doc values gen ");
+ static final BytesRef INDEXOPTIONS = new BytesRef(" index options ");
+ static final BytesRef NUM_ATTS = new BytesRef(" attributes ");
+ static final BytesRef ATT_KEY = new BytesRef(" key ");
+ static final BytesRef ATT_VALUE = new BytesRef(" value ");
+
@Override
- public FieldInfosReader getFieldInfosReader() throws IOException {
- return reader;
+ public FieldInfos read(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, IOContext iocontext) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segmentInfo.name, segmentSuffix, FIELD_INFOS_EXTENSION);
+ ChecksumIndexInput input = directory.openChecksumInput(fileName, iocontext);
+ BytesRefBuilder scratch = new BytesRefBuilder();
+
+ boolean success = false;
+ try {
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), NUMFIELDS);
+ final int size = Integer.parseInt(readString(NUMFIELDS.length, scratch));
+ FieldInfo infos[] = new FieldInfo[size];
+
+ for (int i = 0; i < size; i++) {
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), NAME);
+ String name = readString(NAME.length, scratch);
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), NUMBER);
+ int fieldNumber = Integer.parseInt(readString(NUMBER.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), ISINDEXED);
+ boolean isIndexed = Boolean.parseBoolean(readString(ISINDEXED.length, scratch));
+
+ final IndexOptions indexOptions;
+ if (isIndexed) {
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), INDEXOPTIONS);
+ indexOptions = IndexOptions.valueOf(readString(INDEXOPTIONS.length, scratch));
+ } else {
+ indexOptions = null;
+ }
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), STORETV);
+ boolean storeTermVector = Boolean.parseBoolean(readString(STORETV.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), PAYLOADS);
+ boolean storePayloads = Boolean.parseBoolean(readString(PAYLOADS.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), NORMS);
+ boolean omitNorms = !Boolean.parseBoolean(readString(NORMS.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), NORMS_TYPE);
+ String nrmType = readString(NORMS_TYPE.length, scratch);
+ final DocValuesType normsType = docValuesType(nrmType);
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), DOCVALUES);
+ String dvType = readString(DOCVALUES.length, scratch);
+ final DocValuesType docValuesType = docValuesType(dvType);
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), DOCVALUES_GEN);
+ final long dvGen = Long.parseLong(readString(DOCVALUES_GEN.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), NUM_ATTS);
+ int numAtts = Integer.parseInt(readString(NUM_ATTS.length, scratch));
+ Map<String,String> atts = new HashMap<>();
+
+ for (int j = 0; j < numAtts; j++) {
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), ATT_KEY);
+ String key = readString(ATT_KEY.length, scratch);
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), ATT_VALUE);
+ String value = readString(ATT_VALUE.length, scratch);
+ atts.put(key, value);
+ }
+
+ infos[i] = new FieldInfo(name, isIndexed, fieldNumber, storeTermVector,
+ omitNorms, storePayloads, indexOptions, docValuesType, normsType, dvGen, Collections.unmodifiableMap(atts));
+ }
+
+ SimpleTextUtil.checkFooter(input);
+
+ FieldInfos fieldInfos = new FieldInfos(infos);
+ success = true;
+ return fieldInfos;
+ } finally {
+ if (success) {
+ input.close();
+ } else {
+ IOUtils.closeWhileHandlingException(input);
+ }
+ }
+ }
+
+ public DocValuesType docValuesType(String dvType) {
+ if ("false".equals(dvType)) {
+ return null;
+ } else {
+ return DocValuesType.valueOf(dvType);
+ }
+ }
+
+ private String readString(int offset, BytesRefBuilder scratch) {
+ return new String(scratch.bytes(), offset, scratch.length()-offset, StandardCharsets.UTF_8);
}
@Override
- public FieldInfosWriter getFieldInfosWriter() throws IOException {
- return writer;
+ public void write(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, FieldInfos infos, IOContext context) throws IOException {
+ final String fileName = IndexFileNames.segmentFileName(segmentInfo.name, segmentSuffix, FIELD_INFOS_EXTENSION);
+ IndexOutput out = directory.createOutput(fileName, context);
+ BytesRefBuilder scratch = new BytesRefBuilder();
+ boolean success = false;
+ try {
+ SimpleTextUtil.write(out, NUMFIELDS);
+ SimpleTextUtil.write(out, Integer.toString(infos.size()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ for (FieldInfo fi : infos) {
+ SimpleTextUtil.write(out, NAME);
+ SimpleTextUtil.write(out, fi.name, scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, NUMBER);
+ SimpleTextUtil.write(out, Integer.toString(fi.number), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, ISINDEXED);
+ SimpleTextUtil.write(out, Boolean.toString(fi.isIndexed()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ if (fi.isIndexed()) {
+ assert fi.getIndexOptions().compareTo(IndexOptions.DOCS_AND_FREQS_AND_POSITIONS) >= 0 || !fi.hasPayloads();
+ SimpleTextUtil.write(out, INDEXOPTIONS);
+ SimpleTextUtil.write(out, fi.getIndexOptions().toString(), scratch);
+ SimpleTextUtil.writeNewline(out);
+ }
+
+ SimpleTextUtil.write(out, STORETV);
+ SimpleTextUtil.write(out, Boolean.toString(fi.hasVectors()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, PAYLOADS);
+ SimpleTextUtil.write(out, Boolean.toString(fi.hasPayloads()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, NORMS);
+ SimpleTextUtil.write(out, Boolean.toString(!fi.omitsNorms()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, NORMS_TYPE);
+ SimpleTextUtil.write(out, getDocValuesType(fi.getNormType()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, DOCVALUES);
+ SimpleTextUtil.write(out, getDocValuesType(fi.getDocValuesType()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, DOCVALUES_GEN);
+ SimpleTextUtil.write(out, Long.toString(fi.getDocValuesGen()), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ Map<String,String> atts = fi.attributes();
+ int numAtts = atts == null ? 0 : atts.size();
+ SimpleTextUtil.write(out, NUM_ATTS);
+ SimpleTextUtil.write(out, Integer.toString(numAtts), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ if (numAtts > 0) {
+ for (Map.Entry<String,String> entry : atts.entrySet()) {
+ SimpleTextUtil.write(out, ATT_KEY);
+ SimpleTextUtil.write(out, entry.getKey(), scratch);
+ SimpleTextUtil.writeNewline(out);
+
+ SimpleTextUtil.write(out, ATT_VALUE);
+ SimpleTextUtil.write(out, entry.getValue(), scratch);
+ SimpleTextUtil.writeNewline(out);
+ }
+ }
+ }
+ SimpleTextUtil.writeChecksum(out, scratch);
+ success = true;
+ } finally {
+ if (success) {
+ out.close();
+ } else {
+ IOUtils.closeWhileHandlingException(out);
+ }
+ }
+ }
+
+ private static String getDocValuesType(DocValuesType type) {
+ return type == null ? "false" : type.toString();
}
}
Modified: lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/codecs/src/java/org/apache/lucene/codecs/simpletext/SimpleTextSegmentInfoFormat.java Wed Oct 8 11:35:19 2014
@@ -17,9 +17,28 @@ package org.apache.lucene.codecs.simplet
* limitations under the License.
*/
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
import org.apache.lucene.codecs.SegmentInfoFormat;
-import org.apache.lucene.codecs.SegmentInfoReader;
-import org.apache.lucene.codecs.SegmentInfoWriter;
+import org.apache.lucene.index.CorruptIndexException;
+import org.apache.lucene.index.IndexFileNames;
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.ChecksumIndexInput;
+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.BytesRefBuilder;
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.StringHelper;
+import org.apache.lucene.util.Version;
/**
* plain text segments file format.
@@ -28,18 +47,163 @@ import org.apache.lucene.codecs.SegmentI
* @lucene.experimental
*/
public class SimpleTextSegmentInfoFormat extends SegmentInfoFormat {
- private final SegmentInfoReader reader = new SimpleTextSegmentInfoReader();
- private final SegmentInfoWriter writer = new SimpleTextSegmentInfoWriter();
+ final static BytesRef SI_VERSION = new BytesRef(" version ");
+ final static BytesRef SI_DOCCOUNT = new BytesRef(" number of documents ");
+ final static BytesRef SI_USECOMPOUND = new BytesRef(" uses compound file ");
+ final static BytesRef SI_NUM_DIAG = new BytesRef(" diagnostics ");
+ final static BytesRef SI_DIAG_KEY = new BytesRef(" key ");
+ final static BytesRef SI_DIAG_VALUE = new BytesRef(" value ");
+ final static BytesRef SI_NUM_FILES = new BytesRef(" files ");
+ final static BytesRef SI_FILE = new BytesRef(" file ");
+ final static BytesRef SI_ID = new BytesRef(" id ");
public static final String SI_EXTENSION = "si";
@Override
- public SegmentInfoReader getSegmentInfoReader() {
- return reader;
+ public SegmentInfo read(Directory directory, String segmentName, IOContext context) throws IOException {
+ BytesRefBuilder scratch = new BytesRefBuilder();
+ String segFileName = IndexFileNames.segmentFileName(segmentName, "", SimpleTextSegmentInfoFormat.SI_EXTENSION);
+ ChecksumIndexInput input = directory.openChecksumInput(segFileName, context);
+ boolean success = false;
+ try {
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_VERSION);
+ final Version version;
+ try {
+ version = Version.parse(readString(SI_VERSION.length, scratch));
+ } catch (ParseException pe) {
+ throw new CorruptIndexException("unable to parse version string: " + pe.getMessage(), input, pe);
+ }
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_DOCCOUNT);
+ final int docCount = Integer.parseInt(readString(SI_DOCCOUNT.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_USECOMPOUND);
+ final boolean isCompoundFile = Boolean.parseBoolean(readString(SI_USECOMPOUND.length, scratch));
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_NUM_DIAG);
+ int numDiag = Integer.parseInt(readString(SI_NUM_DIAG.length, scratch));
+ Map<String,String> diagnostics = new HashMap<>();
+
+ for (int i = 0; i < numDiag; i++) {
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_DIAG_KEY);
+ String key = readString(SI_DIAG_KEY.length, scratch);
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_DIAG_VALUE);
+ String value = readString(SI_DIAG_VALUE.length, scratch);
+ diagnostics.put(key, value);
+ }
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_NUM_FILES);
+ int numFiles = Integer.parseInt(readString(SI_NUM_FILES.length, scratch));
+ Set<String> files = new HashSet<>();
+
+ for (int i = 0; i < numFiles; i++) {
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_FILE);
+ String fileName = readString(SI_FILE.length, scratch);
+ files.add(fileName);
+ }
+
+ SimpleTextUtil.readLine(input, scratch);
+ assert StringHelper.startsWith(scratch.get(), SI_ID);
+ final byte[] id = Arrays.copyOfRange(scratch.bytes(), SI_ID.length, scratch.length());
+
+ SimpleTextUtil.checkFooter(input);
+
+ SegmentInfo info = new SegmentInfo(directory, version, segmentName, docCount,
+ isCompoundFile, null, diagnostics, id);
+ info.setFiles(files);
+ success = true;
+ return info;
+ } finally {
+ if (!success) {
+ IOUtils.closeWhileHandlingException(input);
+ } else {
+ input.close();
+ }
+ }
}
+ private String readString(int offset, BytesRefBuilder scratch) {
+ return new String(scratch.bytes(), offset, scratch.length()-offset, StandardCharsets.UTF_8);
+ }
+
@Override
- public SegmentInfoWriter getSegmentInfoWriter() {
- return writer;
+ public void write(Directory dir, SegmentInfo si, IOContext ioContext) throws IOException {
+
+ String segFileName = IndexFileNames.segmentFileName(si.name, "", SimpleTextSegmentInfoFormat.SI_EXTENSION);
+ si.addFile(segFileName);
+
+ boolean success = false;
+ IndexOutput output = dir.createOutput(segFileName, ioContext);
+
+ try {
+ BytesRefBuilder scratch = new BytesRefBuilder();
+
+ SimpleTextUtil.write(output, SI_VERSION);
+ SimpleTextUtil.write(output, si.getVersion().toString(), scratch);
+ SimpleTextUtil.writeNewline(output);
+
+ SimpleTextUtil.write(output, SI_DOCCOUNT);
+ SimpleTextUtil.write(output, Integer.toString(si.getDocCount()), scratch);
+ SimpleTextUtil.writeNewline(output);
+
+ SimpleTextUtil.write(output, SI_USECOMPOUND);
+ SimpleTextUtil.write(output, Boolean.toString(si.getUseCompoundFile()), scratch);
+ SimpleTextUtil.writeNewline(output);
+
+ Map<String,String> diagnostics = si.getDiagnostics();
+ int numDiagnostics = diagnostics == null ? 0 : diagnostics.size();
+ SimpleTextUtil.write(output, SI_NUM_DIAG);
+ SimpleTextUtil.write(output, Integer.toString(numDiagnostics), scratch);
+ SimpleTextUtil.writeNewline(output);
+
+ if (numDiagnostics > 0) {
+ for (Map.Entry<String,String> diagEntry : diagnostics.entrySet()) {
+ SimpleTextUtil.write(output, SI_DIAG_KEY);
+ SimpleTextUtil.write(output, diagEntry.getKey(), scratch);
+ SimpleTextUtil.writeNewline(output);
+
+ SimpleTextUtil.write(output, SI_DIAG_VALUE);
+ SimpleTextUtil.write(output, diagEntry.getValue(), scratch);
+ SimpleTextUtil.writeNewline(output);
+ }
+ }
+
+ Set<String> files = si.files();
+ int numFiles = files == null ? 0 : files.size();
+ SimpleTextUtil.write(output, SI_NUM_FILES);
+ SimpleTextUtil.write(output, Integer.toString(numFiles), scratch);
+ SimpleTextUtil.writeNewline(output);
+
+ if (numFiles > 0) {
+ for(String fileName : files) {
+ SimpleTextUtil.write(output, SI_FILE);
+ SimpleTextUtil.write(output, fileName, scratch);
+ SimpleTextUtil.writeNewline(output);
+ }
+ }
+
+ SimpleTextUtil.write(output, SI_ID);
+ SimpleTextUtil.write(output, new BytesRef(si.getId()));
+ SimpleTextUtil.writeNewline(output);
+
+ SimpleTextUtil.writeChecksum(output, scratch);
+ success = true;
+ } finally {
+ if (!success) {
+ IOUtils.closeWhileHandlingException(output);
+ IOUtils.deleteFilesIgnoringExceptions(dir, segFileName);
+ } else {
+ output.close();
+ }
+ }
}
}
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/FieldInfosFormat.java Wed Oct 8 11:35:19 2014
@@ -20,6 +20,9 @@ package org.apache.lucene.codecs;
import java.io.IOException;
import org.apache.lucene.index.FieldInfos; // javadocs
+import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
/**
* Encodes/decodes {@link FieldInfos}
@@ -30,12 +33,11 @@ public abstract class FieldInfosFormat {
* constructors, typically implicit.) */
protected FieldInfosFormat() {
}
+
+ /** Read the {@link FieldInfos} previously written with {@link #write}. */
+ public abstract FieldInfos read(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, IOContext iocontext) throws IOException;
- /** Returns a {@link FieldInfosReader} to read field infos
- * from the index */
- public abstract FieldInfosReader getFieldInfosReader() throws IOException;
-
- /** Returns a {@link FieldInfosWriter} to write field infos
- * to the index */
- public abstract FieldInfosWriter getFieldInfosWriter() throws IOException;
+ /** Writes the provided {@link FieldInfos} to the
+ * directory. */
+ public abstract void write(Directory directory, SegmentInfo segmentInfo, String segmentSuffix, FieldInfos infos, IOContext context) throws IOException;
}
Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoFormat.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoFormat.java?rev=1630075&r1=1630074&r2=1630075&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoFormat.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/codecs/SegmentInfoFormat.java Wed Oct 8 11:35:19 2014
@@ -17,7 +17,11 @@ package org.apache.lucene.codecs;
* limitations under the License.
*/
+import java.io.IOException;
+
import org.apache.lucene.index.SegmentInfo;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.IOContext;
/**
* Expert: Controls the format of the
@@ -33,11 +37,18 @@ public abstract class SegmentInfoFormat
protected SegmentInfoFormat() {
}
- /** Returns the {@link SegmentInfoReader} for reading
- * {@link SegmentInfo} instances. */
- public abstract SegmentInfoReader getSegmentInfoReader();
+ /**
+ * Read {@link SegmentInfo} data from a directory.
+ * @param directory directory to read from
+ * @param segmentName name of the segment to read
+ * @return infos instance to be populated with data
+ * @throws IOException If an I/O error occurs
+ */
+ public abstract SegmentInfo read(Directory directory, String segmentName, IOContext context) throws IOException;
- /** Returns the {@link SegmentInfoWriter} for writing
- * {@link SegmentInfo} instances. */
- public abstract SegmentInfoWriter getSegmentInfoWriter();
+ /**
+ * Write {@link SegmentInfo} data.
+ * @throws IOException If an I/O error occurs
+ */
+ public abstract void write(Directory dir, SegmentInfo info, IOContext ioContext) throws IOException;
}