[ 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-unsubscr...@lucene.apache.org For additional commands, e-mail: issues-h...@lucene.apache.org