From 5d2708f628d4718f6267e9da6c8cbafeda66f4fb Mon Sep 17 00:00:00 2001 From: anoopsjohn Date: Thu, 6 Aug 2015 10:16:51 +0530 Subject: [PATCH] HBASE-14186 Read mvcc vlong optimization. --- .../hadoop/hbase/io/hfile/HFileReaderImpl.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java index 82f5366496f..18240b1c7d6 100644 --- a/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java +++ b/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderImpl.java @@ -633,9 +633,22 @@ public class HFileReaderImpl implements HFile.Reader, Configurable { if (len == 1) { this.currMemstoreTS = firstByte; } else { + int remaining = len -1; long i = 0; offsetFromPos++; - for (int idx = 0; idx < len - 1; idx++) { + if (remaining >= Bytes.SIZEOF_INT) { + i = blockBuffer.getIntAfterPosition(offsetFromPos); + remaining -= Bytes.SIZEOF_INT; + offsetFromPos += Bytes.SIZEOF_INT; + } + if (remaining >= Bytes.SIZEOF_SHORT) { + short s = blockBuffer.getShortAfterPosition(offsetFromPos); + i = i << 16; + i = i | (s & 0xFFFF); + remaining -= Bytes.SIZEOF_SHORT; + offsetFromPos += Bytes.SIZEOF_SHORT; + } + for (int idx = 0; idx < remaining; idx++) { byte b = blockBuffer.getByteAfterPosition(offsetFromPos + idx); i = i << 8; i = i | (b & 0xFF);