You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by la...@apache.org on 2013/03/21 19:13:30 UTC
svn commit: r1459433 -
/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
Author: larsh
Date: Thu Mar 21 18:13:30 2013
New Revision: 1459433
URL: http://svn.apache.org/r1459433
Log:
HBASE-8151 Decode memstoreTS in HFileReaderV2 only when necessary
Modified:
hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
Modified: hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
URL: http://svn.apache.org/viewvc/hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java?rev=1459433&r1=1459432&r2=1459433&view=diff
==============================================================================
--- hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (original)
+++ hbase/trunk/hbase-server/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java Thu Mar 21 18:13:30 2013
@@ -54,6 +54,7 @@ public class HFileReaderV2 extends Abstr
private static int KEY_VALUE_LEN_SIZE = 2 * Bytes.SIZEOF_INT;
private boolean includesMemstoreTS = false;
+ private boolean decodeMemstoreTS = false;
private boolean shouldIncludeMemstoreTS() {
return includesMemstoreTS;
@@ -147,6 +148,9 @@ public class HFileReaderV2 extends Abstr
Bytes.toInt(keyValueFormatVersion) ==
HFileWriterV2.KEY_VALUE_VER_WITH_MEMSTORE;
fsBlockReaderV2.setIncludesMemstoreTS(includesMemstoreTS);
+ if (includesMemstoreTS) {
+ decodeMemstoreTS = Bytes.toLong(fileInfo.get(HFileWriterV2.MAX_MEMSTORE_TS_KEY)) > 0;
+ }
// Read data block encoding algorithm name from file info.
dataBlockEncoder = HFileDataBlockEncoderImpl.createFromFileInfo(fileInfo,
@@ -769,15 +773,20 @@ public class HFileReaderV2 extends Abstr
currValueLen = blockBuffer.getInt();
blockBuffer.reset();
if (this.reader.shouldIncludeMemstoreTS()) {
- try {
- int memstoreTSOffset = blockBuffer.arrayOffset()
- + blockBuffer.position() + KEY_VALUE_LEN_SIZE + currKeyLen
- + currValueLen;
- currMemstoreTS = Bytes.readVLong(blockBuffer.array(),
- memstoreTSOffset);
- currMemstoreTSLen = WritableUtils.getVIntSize(currMemstoreTS);
- } catch (Exception e) {
- throw new RuntimeException("Error reading memstore timestamp", e);
+ if (this.reader.decodeMemstoreTS) {
+ try {
+ int memstoreTSOffset = blockBuffer.arrayOffset()
+ + blockBuffer.position() + KEY_VALUE_LEN_SIZE + currKeyLen
+ + currValueLen;
+ currMemstoreTS = Bytes.readVLong(blockBuffer.array(),
+ memstoreTSOffset);
+ currMemstoreTSLen = WritableUtils.getVIntSize(currMemstoreTS);
+ } catch (Exception e) {
+ throw new RuntimeException("Error reading memstore timestamp", e);
+ }
+ } else {
+ currMemstoreTS = 0;
+ currMemstoreTSLen = 1;
}
}
@@ -816,14 +825,19 @@ public class HFileReaderV2 extends Abstr
vlen = blockBuffer.getInt();
blockBuffer.reset();
if (this.reader.shouldIncludeMemstoreTS()) {
- try {
- int memstoreTSOffset = blockBuffer.arrayOffset()
- + blockBuffer.position() + KEY_VALUE_LEN_SIZE + klen + vlen;
- memstoreTS = Bytes.readVLong(blockBuffer.array(),
- memstoreTSOffset);
- memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
- } catch (Exception e) {
- throw new RuntimeException("Error reading memstore timestamp", e);
+ if (this.reader.decodeMemstoreTS) {
+ try {
+ int memstoreTSOffset = blockBuffer.arrayOffset()
+ + blockBuffer.position() + KEY_VALUE_LEN_SIZE + klen + vlen;
+ memstoreTS = Bytes.readVLong(blockBuffer.array(),
+ memstoreTSOffset);
+ memstoreTSLen = WritableUtils.getVIntSize(memstoreTS);
+ } catch (Exception e) {
+ throw new RuntimeException("Error reading memstore timestamp", e);
+ }
+ } else {
+ memstoreTS = 0;
+ memstoreTSLen = 1;
}
}