You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Max Lapan (JIRA)" <ji...@apache.org> on 2013/02/25 14:52:12 UTC
[jira] [Commented] (HBASE-5071) HFile has a possible cast issue.
[ https://issues.apache.org/jira/browse/HBASE-5071?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13585860#comment-13585860 ]
Max Lapan commented on HBASE-5071:
----------------------------------
Add my notes on this bug. This could be helpful to somewone who as we are still use HFileV1.
This bug was introduced by HBASE-3040 performance optimisation and cannot be fixed by Harsh's patch, which truncates index data (there are later problems rise on index parse).
I fixed this issue in our installation by replacing readAllIndex whith BufferedInputStreams, which is transparent and have no index size limitations: https://github.com/Shmuma/hbase/commit/d0ef517482a0475588e229344558c31b47d5a269
> HFile has a possible cast issue.
> --------------------------------
>
> Key: HBASE-5071
> URL: https://issues.apache.org/jira/browse/HBASE-5071
> Project: HBase
> Issue Type: Bug
> Components: HFile, io
> Affects Versions: 0.90.0
> Reporter: Harsh J
> Labels: hfile
> Fix For: 0.96.0
>
>
> HBASE-3040 introduced this line originally in HFile.Reader#loadFileInfo(...):
> {code}
> int allIndexSize = (int)(this.fileSize - this.trailer.dataIndexOffset - FixedFileTrailer.trailerSize());
> {code}
> Which on trunk today, for HFile v1 is:
> {code}
> int sizeToLoadOnOpen = (int) (fileSize - trailer.getLoadOnOpenDataOffset() -
> trailer.getTrailerSize());
> {code}
> This computed (and casted) integer is then used to build an array of the same size. But if fileSize is very large (>> Integer.MAX_VALUE), then there's an easy chance this can go negative at some point and spew out exceptions such as:
> {code}
> java.lang.NegativeArraySizeException
> at org.apache.hadoop.hbase.io.hfile.HFile$Reader.readAllIndex(HFile.java:805)
> at org.apache.hadoop.hbase.io.hfile.HFile$Reader.loadFileInfo(HFile.java:832)
> at org.apache.hadoop.hbase.regionserver.StoreFile$Reader.loadFileInfo(StoreFile.java:1003)
> at org.apache.hadoop.hbase.regionserver.StoreFile.open(StoreFile.java:382)
> at org.apache.hadoop.hbase.regionserver.StoreFile.createReader(StoreFile.java:438)
> at org.apache.hadoop.hbase.regionserver.Store.loadStoreFiles(Store.java:267)
> at org.apache.hadoop.hbase.regionserver.Store.<init>(Store.java:209)
> at org.apache.hadoop.hbase.regionserver.HRegion.instantiateHStore(HRegion.java:2088)
> at org.apache.hadoop.hbase.regionserver.HRegion.initialize(HRegion.java:358)
> at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:2661)
> at org.apache.hadoop.hbase.regionserver.HRegion.openHRegion(HRegion.java:2647)
> {code}
> Did we accidentally limit single region sizes this way?
> (Unsure about HFile v2's structure so far, so do not know if v2 has the same issue.)
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira