[ https://issues.apache.org/jira/browse/HBASE-27940?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
chenglei resolved HBASE-27940. ------------------------------ Resolution: Fixed > Midkey metadata in root index block would always be ignored by > BlockIndexReader.readMultiLevelIndexRoot > ------------------------------------------------------------------------------------------------------- > > Key: HBASE-27940 > URL: https://issues.apache.org/jira/browse/HBASE-27940 > Project: HBase > Issue Type: Bug > Components: HFile > Affects Versions: 3.0.0-alpha-4, 2.4.17, 2.5.5, 4.0.0-alpha-1 > Reporter: chenglei > Assignee: chenglei > Priority: Major > > After HBASE-27053, checksum is removed from the {{HFileBlock}} {{ByteBuff}} > in {{FSReaderImpl.readBlockDataInternal}} once the checksum is verified, so > {{HFileBlock.buf}} does not include checksum, but for > {{BlockIndexReader.readMultiLevelIndexRoot}}, after read root index entries , > it still subtracts the checksum to check if the midkey metadat exists, the > midkey metadata would always be ignored: > {code:java} > public void readMultiLevelIndexRoot(HFileBlock blk, final int numEntries) > throws IOException { > DataInputStream in = readRootIndex(blk, numEntries); > // after reading the root index the checksum bytes have to > // be subtracted to know if the mid key exists. > int checkSumBytes = blk.totalChecksumBytes(); > if ((in.available() - checkSumBytes) < MID_KEY_METADATA_SIZE) { > // No mid-key metadata available. > return; > } > midLeafBlockOffset = in.readLong(); > midLeafBlockOnDiskSize = in.readInt(); > midKeyEntry = in.readInt(); > } > {code} -- This message was sent by Atlassian Jira (v8.20.10#820010)