Index: hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java =================================================================== --- hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (revision 1522763) +++ hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (working copy) @@ -961,17 +961,18 @@ "EncodedScannerV2 works only on encoded data blocks"); } - short dataBlockEncoderId = block.getDataBlockEncodingId(); + updateDataBlockEncoder(block); + seeker.setCurrentBuffer(getEncodedBuffer(newBlock)); + blockFetches++; + } + + private void updateDataBlockEncoder(HFileBlock curBlock) { + short dataBlockEncoderId = curBlock.getDataBlockEncodingId(); if (dataBlockEncoder == null || - !DataBlockEncoding.isCorrectEncoder(dataBlockEncoder, - dataBlockEncoderId)) { - DataBlockEncoder encoder = - DataBlockEncoding.getDataBlockEncoderById(dataBlockEncoderId); + !DataBlockEncoding.isCorrectEncoder(dataBlockEncoder, dataBlockEncoderId)) { + DataBlockEncoder encoder = DataBlockEncoding.getDataBlockEncoderById(dataBlockEncoderId); setDataBlockEncoder(encoder); } - - seeker.setCurrentBuffer(getEncodedBuffer(newBlock)); - blockFetches++; } private ByteBuffer getEncodedBuffer(HFileBlock newBlock) { @@ -1066,6 +1067,7 @@ @Override protected ByteBuffer getFirstKeyInBlock(HFileBlock curBlock) { + updateDataBlockEncoder(curBlock); return dataBlockEncoder.getFirstKeyInBlock(getEncodedBuffer(curBlock)); }