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:11:59 UTC

svn commit: r1459431 - /hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java

Author: larsh
Date: Thu Mar 21 18:11:59 2013
New Revision: 1459431

URL: http://svn.apache.org/r1459431
Log:
HBASE-8151 Decode memstoreTS in HFileReaderV2 only when necessary

Modified:
    hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java

Modified: hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java?rev=1459431&r1=1459430&r2=1459431&view=diff
==============================================================================
--- hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java (original)
+++ hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java Thu Mar 21 18:11:59 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;
@@ -145,6 +146,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,
@@ -785,15 +789,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;
         }
       }
 
@@ -832,14 +841,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;
           }
         }