You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@lucene.apache.org by "Adrien Grand (Jira)" <ji...@apache.org> on 2020/05/03 08:19:00 UTC

[jira] [Commented] (LUCENE-7822) IllegalArgumentException thrown instead of a CorruptIndexException

    [ https://issues.apache.org/jira/browse/LUCENE-7822?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17098298#comment-17098298 ] 

Adrien Grand commented on LUCENE-7822:
--------------------------------------

I'd like to revive this issue since I agree with Martin that the CorruptIndexException is much more useful, the true problem is that the file is corrupt, not that the version bits are illegal or that a given codec doesn't exist? In the case of systems like Solr or Elasticsearch, knowing that the problem is a corruption is also more useful as in some cases you can re-create the shard from another copy that isn't corrupt automatically.

Would it be acceptable to change checkFooter to throw the CorruptIndexException with the prior exception as a suppressed exception when checksums don't match? Or maybe we should stop using the variant of checkFooter that takes a prior exception and call checksumEntireFile up-front instead on our metadata files as suggested above?

> IllegalArgumentException thrown instead of a CorruptIndexException
> ------------------------------------------------------------------
>
>                 Key: LUCENE-7822
>                 URL: https://issues.apache.org/jira/browse/LUCENE-7822
>             Project: Lucene - Core
>          Issue Type: Bug
>    Affects Versions: 6.5.1
>            Reporter: Martin Amirault
>            Priority: Minor
>         Attachments: LUCENE-7822.patch
>
>
> Similarly to LUCENE-7592 , When an {{*.si}} file is corrupted on very specific part an IllegalArgumentException is thrown instead of a CorruptIndexException.
> StackTrace (Lucene 6.5.1):
> {code}
> java.lang.IllegalArgumentException: Illegal minor version: 12517381
> 	at __randomizedtesting.SeedInfo.seed([1FEB5987CFA44BE:B8755B5574F9F3BF]:0)
> 	at org.apache.lucene.util.Version.<init>(Version.java:385)
> 	at org.apache.lucene.util.Version.<init>(Version.java:371)
> 	at org.apache.lucene.util.Version.fromBits(Version.java:353)
> 	at org.apache.lucene.codecs.lucene62.Lucene62SegmentInfoFormat.read(Lucene62SegmentInfoFormat.java:97)
> 	at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:357)
> 	at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:288)
> 	at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:448)
> 	at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:445)
> 	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:692)
> 	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:644)
> 	at org.apache.lucene.index.SegmentInfos.readLatestCommit(SegmentInfos.java:450)
> 	at org.apache.lucene.index.DirectoryReader.listCommits(DirectoryReader.java:260)
> {code}
> Simple fix would be to add IllegalArgumentException to the catch list at 
> {{org/apache/lucene/index/SegmentInfos.java:289}}
> Other variations for the stacktraces:
> {code}
> java.lang.IllegalArgumentException: invalid codec filename '_�.cfs', must match: _[a-z0-9]+(_.*)?\..*
> 	at __randomizedtesting.SeedInfo.seed([8B3FDE317B8D634A:A8EE07E5EB4B0B13]:0)
> 	at org.apache.lucene.index.SegmentInfo.checkFileNames(SegmentInfo.java:270)
> 	at org.apache.lucene.index.SegmentInfo.addFiles(SegmentInfo.java:252)
> 	at org.apache.lucene.index.SegmentInfo.setFiles(SegmentInfo.java:246)
> 	at org.apache.lucene.codecs.lucene62.Lucene62SegmentInfoFormat.read(Lucene62SegmentInfoFormat.java:248)
> 	at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:357)
> 	at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:288)
> 	at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:448)
> 	at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:445)
> 	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:692)
> 	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:644)
> 	at org.apache.lucene.index.SegmentInfos.readLatestCommit(SegmentInfos.java:450)
> 	at org.apache.lucene.index.DirectoryReader.listCommits(DirectoryReader.java:260)
> {code}
> {code}
> java.lang.IllegalArgumentException: An SPI class of type org.apache.lucene.codecs.Codec with name 'LucenI62' does not exist.  You need to add the corresponding JAR file supporting this SPI to your classpath.  The current classpath supports the following names: [Lucene62, Lucene50, Lucene53, Lucene54, Lucene60]
> 	at __randomizedtesting.SeedInfo.seed([925DE160F7260F99:B026EB9373CB6368]:0)
> 	at org.apache.lucene.util.NamedSPILoader.lookup(NamedSPILoader.java:116)
> 	at org.apache.lucene.codecs.Codec.forName(Codec.java:116)
> 	at org.apache.lucene.index.SegmentInfos.readCodec(SegmentInfos.java:424)
> 	at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:356)
> 	at org.apache.lucene.index.SegmentInfos.readCommit(SegmentInfos.java:288)
> 	at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:448)
> 	at org.apache.lucene.index.SegmentInfos$1.doBody(SegmentInfos.java:445)
> 	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:692)
> 	at org.apache.lucene.index.SegmentInfos$FindSegmentsFile.run(SegmentInfos.java:644)
> 	at org.apache.lucene.index.SegmentInfos.readLatestCommit(SegmentInfos.java:450)
> 	at org.apache.lucene.index.DirectoryReader.listCommits(DirectoryReader.java:260)
> {code}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscribe@lucene.apache.org
For additional commands, e-mail: issues-help@lucene.apache.org