You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rj...@apache.org on 2015/04/29 01:46:21 UTC
svn commit: r1676648 - in /lucene/dev/trunk: ./ lucene/
lucene/backward-codecs/src/test/org/apache/lucene/index/
lucene/core/src/java/org/apache/lucene/index/
Author: rjernst
Date: Tue Apr 28 23:46:20 2015
New Revision: 1676648
URL: http://svn.apache.org/r1676648
Log:
LUCENE-6213: Add useful exception message when commit contains segments from legacy codecs (forward port from branch_5x)
Added:
lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip (with props)
lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip (with props)
Modified:
lucene/dev/trunk/ (props changed)
lucene/dev/trunk/lucene/CHANGES.txt
lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
Modified: lucene/dev/trunk/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1676648&r1=1676647&r2=1676648&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/CHANGES.txt (original)
+++ lucene/dev/trunk/lucene/CHANGES.txt Tue Apr 28 23:46:20 2015
@@ -928,6 +928,9 @@ Other
* LUCENE-5915: Remove Pulsing postings format. (Robert Muir)
+* LUCENE-6213: Add useful exception message when commit contains segments from legacy codecs.
+ (Ryan Ernst)
+
======================= Lucene 4.10.4 ======================
Bug fixes
Modified: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1676648&r1=1676647&r2=1676648&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
+++ lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Tue Apr 28 23:46:20 2015
@@ -321,7 +321,9 @@ public class TestBackwardsCompatibility
"4.10.3-cfs",
"4.10.3-nocfs",
"4.10.4-cfs",
- "4.10.4-nocfs"
+ "4.10.4-nocfs",
+ "5x-with-4x-segments-cfs",
+ "5x-with-4x-segments-nocfs"
};
final static String[] oldSingleSegmentNames = {
@@ -845,7 +847,7 @@ public class TestBackwardsCompatibility
mp.setMaxCFSSegmentSizeMB(Double.POSITIVE_INFINITY);
// TODO: remove randomness
IndexWriterConfig conf = new IndexWriterConfig(new MockAnalyzer(random()))
- .setMaxBufferedDocs(10).setMergePolicy(mp);
+ .setMaxBufferedDocs(10).setMergePolicy(NoMergePolicy.INSTANCE);
IndexWriter writer = new IndexWriter(dir, conf);
for(int i=0;i<35;i++) {
@@ -863,7 +865,7 @@ public class TestBackwardsCompatibility
mp.setNoCFSRatio(doCFS ? 1.0 : 0.0);
// TODO: remove randomness
conf = new IndexWriterConfig(new MockAnalyzer(random()))
- .setMaxBufferedDocs(10).setMergePolicy(mp);
+ .setMaxBufferedDocs(10).setMergePolicy(NoMergePolicy.INSTANCE);
writer = new IndexWriter(dir, conf);
addNoProxDoc(writer);
writer.close();
Added: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip?rev=1676648&view=auto
==============================================================================
Binary file - no diff available.
Added: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip?rev=1676648&view=auto
==============================================================================
Binary file - no diff available.
Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1676648&r1=1676647&r2=1676648&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java (original)
+++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java Tue Apr 28 23:46:20 2015
@@ -37,6 +37,7 @@ import org.apache.lucene.codecs.DocValue
import org.apache.lucene.codecs.FieldInfosFormat;
import org.apache.lucene.codecs.LiveDocsFormat;
import org.apache.lucene.store.ChecksumIndexInput;
+import org.apache.lucene.store.DataInput;
import org.apache.lucene.store.DataOutput;
import org.apache.lucene.store.Directory;
import org.apache.lucene.store.IOContext;
@@ -276,7 +277,7 @@ public final class SegmentInfos implemen
byte id[] = new byte[StringHelper.ID_LENGTH];
input.readBytes(id, 0, id.length);
CodecUtil.checkIndexHeaderSuffix(input, Long.toString(generation, Character.MAX_RADIX));
-
+
SegmentInfos infos = new SegmentInfos();
infos.id = id;
infos.generation = generation;
@@ -295,10 +296,12 @@ public final class SegmentInfos implemen
if (hasID == 1) {
segmentID = new byte[StringHelper.ID_LENGTH];
input.readBytes(segmentID, 0, segmentID.length);
+ } else if (hasID == 0) {
+ throw new IndexFormatTooOldException(input, "Segment is from Lucene 4.x");
} else {
throw new CorruptIndexException("invalid hasID byte, got: " + hasID, input);
}
- Codec codec = Codec.forName(input.readString());
+ Codec codec = readCodec(input);
SegmentInfo info = codec.segmentInfoFormat().read(directory, segName, segmentID, IOContext.READ);
info.setCodec(codec);
totalDocs += info.maxDoc();
@@ -341,15 +344,33 @@ public final class SegmentInfos implemen
CodecUtil.checkFooter(input);
- // LUCENE-6299: check we are in bounds
- if (totalDocs > IndexWriter.getActualMaxDocs()) {
- throw new CorruptIndexException("Too many documents: an index cannot exceed " + IndexWriter.getActualMaxDocs() + " but readers have total maxDoc=" + totalDocs, input);
- }
-
return infos;
}
}
+ private static final List<String> unsupportedCodecs = Arrays.asList(
+ "Lucene3x", "Lucene40", "Lucene41", "Lucene42", "Lucene45", "Lucene46", "Lucene49", "Lucene410"
+ );
+
+ private static Codec readCodec(DataInput input) throws IOException {
+ final String name = input.readString();
+ try {
+ return Codec.forName(name);
+ } catch (IllegalArgumentException e) {
+ // give better error messages if we can, first check if this is a legacy codec
+ if (unsupportedCodecs.contains(name)) {
+ IOException newExc = new IndexFormatTooOldException(input, "Codec '" + name + "' is too old");
+ newExc.initCause(e);
+ throw newExc;
+ }
+ // or maybe it's an old default codec that moved
+ if (name.startsWith("Lucene")) {
+ throw new IllegalArgumentException("Could not load codec '" + name + "'. Did you forget to add lucene-backward-codecs.jar?", e);
+ }
+ throw e;
+ }
+ }
+
/** Find the latest commit ({@code segments_N file}) and
* load all {@link SegmentCommitInfo}s. */
public static final SegmentInfos readLatestCommit(Directory directory) throws IOException {
Re: svn commit: r1676648 - in /lucene/dev/trunk: ./ lucene/
lucene/backward-codecs/src/test/org/apache/lucene/index/ lucene/core/src/java/org/apache/lucene/index/
Posted by Ryan Ernst <ry...@iernst.net>.
Added back. Sorry, bad manual conflict resolution after merge (with svn
merge!).
On Tue, Apr 28, 2015 at 5:19 PM, Robert Muir <rc...@gmail.com> wrote:
> Can this be put back? It currently causes a test failure.
>
> - // LUCENE-6299: check we are in bounds
> - if (totalDocs > IndexWriter.getActualMaxDocs()) {
> - throw new CorruptIndexException("Too many documents: an index
> cannot exceed " + IndexWriter.getActualMaxDocs() + " but readers have
> total maxDoc=" + totalDocs, input);
> - }
>
> On Tue, Apr 28, 2015 at 7:46 PM, <rj...@apache.org> wrote:
> > Author: rjernst
> > Date: Tue Apr 28 23:46:20 2015
> > New Revision: 1676648
> >
> > URL: http://svn.apache.org/r1676648
> > Log:
> > LUCENE-6213: Add useful exception message when commit contains segments
> from legacy codecs (forward port from branch_5x)
> >
> > Added:
> >
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip
> (with props)
> >
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip
> (with props)
> > Modified:
> > lucene/dev/trunk/ (props changed)
> > lucene/dev/trunk/lucene/CHANGES.txt
> >
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> >
> lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
> >
> > Modified: lucene/dev/trunk/lucene/CHANGES.txt
> > URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1676648&r1=1676647&r2=1676648&view=diff
> >
> ==============================================================================
> > --- lucene/dev/trunk/lucene/CHANGES.txt (original)
> > +++ lucene/dev/trunk/lucene/CHANGES.txt Tue Apr 28 23:46:20 2015
> > @@ -928,6 +928,9 @@ Other
> >
> > * LUCENE-5915: Remove Pulsing postings format. (Robert Muir)
> >
> > +* LUCENE-6213: Add useful exception message when commit contains
> segments from legacy codecs.
> > + (Ryan Ernst)
> > +
> > ======================= Lucene 4.10.4 ======================
> >
> > Bug fixes
> >
> > Modified:
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> > URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1676648&r1=1676647&r2=1676648&view=diff
> >
> ==============================================================================
> > ---
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> (original)
> > +++
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> Tue Apr 28 23:46:20 2015
> > @@ -321,7 +321,9 @@ public class TestBackwardsCompatibility
> > "4.10.3-cfs",
> > "4.10.3-nocfs",
> > "4.10.4-cfs",
> > - "4.10.4-nocfs"
> > + "4.10.4-nocfs",
> > + "5x-with-4x-segments-cfs",
> > + "5x-with-4x-segments-nocfs"
> > };
> >
> > final static String[] oldSingleSegmentNames = {
> > @@ -845,7 +847,7 @@ public class TestBackwardsCompatibility
> > mp.setMaxCFSSegmentSizeMB(Double.POSITIVE_INFINITY);
> > // TODO: remove randomness
> > IndexWriterConfig conf = new IndexWriterConfig(new
> MockAnalyzer(random()))
> > - .setMaxBufferedDocs(10).setMergePolicy(mp);
> > + .setMaxBufferedDocs(10).setMergePolicy(NoMergePolicy.INSTANCE);
> > IndexWriter writer = new IndexWriter(dir, conf);
> >
> > for(int i=0;i<35;i++) {
> > @@ -863,7 +865,7 @@ public class TestBackwardsCompatibility
> > mp.setNoCFSRatio(doCFS ? 1.0 : 0.0);
> > // TODO: remove randomness
> > conf = new IndexWriterConfig(new MockAnalyzer(random()))
> > - .setMaxBufferedDocs(10).setMergePolicy(mp);
> > + .setMaxBufferedDocs(10).setMergePolicy(NoMergePolicy.INSTANCE);
> > writer = new IndexWriter(dir, conf);
> > addNoProxDoc(writer);
> > writer.close();
> >
> > Added:
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip
> > URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip?rev=1676648&view=auto
> >
> ==============================================================================
> > Binary file - no diff available.
> >
> > Added:
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip
> > URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip?rev=1676648&view=auto
> >
> ==============================================================================
> > Binary file - no diff available.
> >
> > Modified:
> lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
> > URL:
> http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1676648&r1=1676647&r2=1676648&view=diff
> >
> ==============================================================================
> > ---
> lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
> (original)
> > +++
> lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
> Tue Apr 28 23:46:20 2015
> > @@ -37,6 +37,7 @@ import org.apache.lucene.codecs.DocValue
> > import org.apache.lucene.codecs.FieldInfosFormat;
> > import org.apache.lucene.codecs.LiveDocsFormat;
> > import org.apache.lucene.store.ChecksumIndexInput;
> > +import org.apache.lucene.store.DataInput;
> > import org.apache.lucene.store.DataOutput;
> > import org.apache.lucene.store.Directory;
> > import org.apache.lucene.store.IOContext;
> > @@ -276,7 +277,7 @@ public final class SegmentInfos implemen
> > byte id[] = new byte[StringHelper.ID_LENGTH];
> > input.readBytes(id, 0, id.length);
> > CodecUtil.checkIndexHeaderSuffix(input, Long.toString(generation,
> Character.MAX_RADIX));
> > -
> > +
> > SegmentInfos infos = new SegmentInfos();
> > infos.id = id;
> > infos.generation = generation;
> > @@ -295,10 +296,12 @@ public final class SegmentInfos implemen
> > if (hasID == 1) {
> > segmentID = new byte[StringHelper.ID_LENGTH];
> > input.readBytes(segmentID, 0, segmentID.length);
> > + } else if (hasID == 0) {
> > + throw new IndexFormatTooOldException(input, "Segment is from
> Lucene 4.x");
> > } else {
> > throw new CorruptIndexException("invalid hasID byte, got: " +
> hasID, input);
> > }
> > - Codec codec = Codec.forName(input.readString());
> > + Codec codec = readCodec(input);
> > SegmentInfo info = codec.segmentInfoFormat().read(directory,
> segName, segmentID, IOContext.READ);
> > info.setCodec(codec);
> > totalDocs += info.maxDoc();
> > @@ -341,15 +344,33 @@ public final class SegmentInfos implemen
> >
> > CodecUtil.checkFooter(input);
> >
> > - // LUCENE-6299: check we are in bounds
> > - if (totalDocs > IndexWriter.getActualMaxDocs()) {
> > - throw new CorruptIndexException("Too many documents: an index
> cannot exceed " + IndexWriter.getActualMaxDocs() + " but readers have total
> maxDoc=" + totalDocs, input);
> > - }
> > -
> > return infos;
> > }
> > }
> >
> > + private static final List<String> unsupportedCodecs = Arrays.asList(
> > + "Lucene3x", "Lucene40", "Lucene41", "Lucene42", "Lucene45",
> "Lucene46", "Lucene49", "Lucene410"
> > + );
> > +
> > + private static Codec readCodec(DataInput input) throws IOException {
> > + final String name = input.readString();
> > + try {
> > + return Codec.forName(name);
> > + } catch (IllegalArgumentException e) {
> > + // give better error messages if we can, first check if this is a
> legacy codec
> > + if (unsupportedCodecs.contains(name)) {
> > + IOException newExc = new IndexFormatTooOldException(input,
> "Codec '" + name + "' is too old");
> > + newExc.initCause(e);
> > + throw newExc;
> > + }
> > + // or maybe it's an old default codec that moved
> > + if (name.startsWith("Lucene")) {
> > + throw new IllegalArgumentException("Could not load codec '" +
> name + "'. Did you forget to add lucene-backward-codecs.jar?", e);
> > + }
> > + throw e;
> > + }
> > + }
> > +
> > /** Find the latest commit ({@code segments_N file}) and
> > * load all {@link SegmentCommitInfo}s. */
> > public static final SegmentInfos readLatestCommit(Directory
> directory) throws IOException {
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
> For additional commands, e-mail: dev-help@lucene.apache.org
>
>
Re: svn commit: r1676648 - in /lucene/dev/trunk: ./ lucene/
lucene/backward-codecs/src/test/org/apache/lucene/index/ lucene/core/src/java/org/apache/lucene/index/
Posted by Robert Muir <rc...@gmail.com>.
Can this be put back? It currently causes a test failure.
- // LUCENE-6299: check we are in bounds
- if (totalDocs > IndexWriter.getActualMaxDocs()) {
- throw new CorruptIndexException("Too many documents: an index
cannot exceed " + IndexWriter.getActualMaxDocs() + " but readers have
total maxDoc=" + totalDocs, input);
- }
On Tue, Apr 28, 2015 at 7:46 PM, <rj...@apache.org> wrote:
> Author: rjernst
> Date: Tue Apr 28 23:46:20 2015
> New Revision: 1676648
>
> URL: http://svn.apache.org/r1676648
> Log:
> LUCENE-6213: Add useful exception message when commit contains segments from legacy codecs (forward port from branch_5x)
>
> Added:
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip (with props)
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip (with props)
> Modified:
> lucene/dev/trunk/ (props changed)
> lucene/dev/trunk/lucene/CHANGES.txt
> lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
>
> Modified: lucene/dev/trunk/lucene/CHANGES.txt
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/CHANGES.txt?rev=1676648&r1=1676647&r2=1676648&view=diff
> ==============================================================================
> --- lucene/dev/trunk/lucene/CHANGES.txt (original)
> +++ lucene/dev/trunk/lucene/CHANGES.txt Tue Apr 28 23:46:20 2015
> @@ -928,6 +928,9 @@ Other
>
> * LUCENE-5915: Remove Pulsing postings format. (Robert Muir)
>
> +* LUCENE-6213: Add useful exception message when commit contains segments from legacy codecs.
> + (Ryan Ernst)
> +
> ======================= Lucene 4.10.4 ======================
>
> Bug fixes
>
> Modified: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java?rev=1676648&r1=1676647&r2=1676648&view=diff
> ==============================================================================
> --- lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java (original)
> +++ lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java Tue Apr 28 23:46:20 2015
> @@ -321,7 +321,9 @@ public class TestBackwardsCompatibility
> "4.10.3-cfs",
> "4.10.3-nocfs",
> "4.10.4-cfs",
> - "4.10.4-nocfs"
> + "4.10.4-nocfs",
> + "5x-with-4x-segments-cfs",
> + "5x-with-4x-segments-nocfs"
> };
>
> final static String[] oldSingleSegmentNames = {
> @@ -845,7 +847,7 @@ public class TestBackwardsCompatibility
> mp.setMaxCFSSegmentSizeMB(Double.POSITIVE_INFINITY);
> // TODO: remove randomness
> IndexWriterConfig conf = new IndexWriterConfig(new MockAnalyzer(random()))
> - .setMaxBufferedDocs(10).setMergePolicy(mp);
> + .setMaxBufferedDocs(10).setMergePolicy(NoMergePolicy.INSTANCE);
> IndexWriter writer = new IndexWriter(dir, conf);
>
> for(int i=0;i<35;i++) {
> @@ -863,7 +865,7 @@ public class TestBackwardsCompatibility
> mp.setNoCFSRatio(doCFS ? 1.0 : 0.0);
> // TODO: remove randomness
> conf = new IndexWriterConfig(new MockAnalyzer(random()))
> - .setMaxBufferedDocs(10).setMergePolicy(mp);
> + .setMaxBufferedDocs(10).setMergePolicy(NoMergePolicy.INSTANCE);
> writer = new IndexWriter(dir, conf);
> addNoProxDoc(writer);
> writer.close();
>
> Added: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-cfs.zip?rev=1676648&view=auto
> ==============================================================================
> Binary file - no diff available.
>
> Added: lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/backward-codecs/src/test/org/apache/lucene/index/unsupported.5x-with-4x-segments-nocfs.zip?rev=1676648&view=auto
> ==============================================================================
> Binary file - no diff available.
>
> Modified: lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java
> URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java?rev=1676648&r1=1676647&r2=1676648&view=diff
> ==============================================================================
> --- lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java (original)
> +++ lucene/dev/trunk/lucene/core/src/java/org/apache/lucene/index/SegmentInfos.java Tue Apr 28 23:46:20 2015
> @@ -37,6 +37,7 @@ import org.apache.lucene.codecs.DocValue
> import org.apache.lucene.codecs.FieldInfosFormat;
> import org.apache.lucene.codecs.LiveDocsFormat;
> import org.apache.lucene.store.ChecksumIndexInput;
> +import org.apache.lucene.store.DataInput;
> import org.apache.lucene.store.DataOutput;
> import org.apache.lucene.store.Directory;
> import org.apache.lucene.store.IOContext;
> @@ -276,7 +277,7 @@ public final class SegmentInfos implemen
> byte id[] = new byte[StringHelper.ID_LENGTH];
> input.readBytes(id, 0, id.length);
> CodecUtil.checkIndexHeaderSuffix(input, Long.toString(generation, Character.MAX_RADIX));
> -
> +
> SegmentInfos infos = new SegmentInfos();
> infos.id = id;
> infos.generation = generation;
> @@ -295,10 +296,12 @@ public final class SegmentInfos implemen
> if (hasID == 1) {
> segmentID = new byte[StringHelper.ID_LENGTH];
> input.readBytes(segmentID, 0, segmentID.length);
> + } else if (hasID == 0) {
> + throw new IndexFormatTooOldException(input, "Segment is from Lucene 4.x");
> } else {
> throw new CorruptIndexException("invalid hasID byte, got: " + hasID, input);
> }
> - Codec codec = Codec.forName(input.readString());
> + Codec codec = readCodec(input);
> SegmentInfo info = codec.segmentInfoFormat().read(directory, segName, segmentID, IOContext.READ);
> info.setCodec(codec);
> totalDocs += info.maxDoc();
> @@ -341,15 +344,33 @@ public final class SegmentInfos implemen
>
> CodecUtil.checkFooter(input);
>
> - // LUCENE-6299: check we are in bounds
> - if (totalDocs > IndexWriter.getActualMaxDocs()) {
> - throw new CorruptIndexException("Too many documents: an index cannot exceed " + IndexWriter.getActualMaxDocs() + " but readers have total maxDoc=" + totalDocs, input);
> - }
> -
> return infos;
> }
> }
>
> + private static final List<String> unsupportedCodecs = Arrays.asList(
> + "Lucene3x", "Lucene40", "Lucene41", "Lucene42", "Lucene45", "Lucene46", "Lucene49", "Lucene410"
> + );
> +
> + private static Codec readCodec(DataInput input) throws IOException {
> + final String name = input.readString();
> + try {
> + return Codec.forName(name);
> + } catch (IllegalArgumentException e) {
> + // give better error messages if we can, first check if this is a legacy codec
> + if (unsupportedCodecs.contains(name)) {
> + IOException newExc = new IndexFormatTooOldException(input, "Codec '" + name + "' is too old");
> + newExc.initCause(e);
> + throw newExc;
> + }
> + // or maybe it's an old default codec that moved
> + if (name.startsWith("Lucene")) {
> + throw new IllegalArgumentException("Could not load codec '" + name + "'. Did you forget to add lucene-backward-codecs.jar?", e);
> + }
> + throw e;
> + }
> + }
> +
> /** Find the latest commit ({@code segments_N file}) and
> * load all {@link SegmentCommitInfo}s. */
> public static final SegmentInfos readLatestCommit(Directory directory) throws IOException {
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@lucene.apache.org
For additional commands, e-mail: dev-help@lucene.apache.org