Author: larsh
Date: Mon Oct 14 03:59:44 2013
New Revision: 1531792

URL: http://svn.apache.org/r1531792
Log:
HBASE-9751 Excessive readpoints checks in StoreFileScanner

Modified:
    
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/AbstractHFileReader.java
    
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java
    
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFileReaderV2.java
    
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
    
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java

Modified: 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/AbstractHFileReader.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/AbstractHFileReader.java?rev=1531792&r1=1531791&r2=1531792&view=diff
==============================================================================
--- 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/AbstractHFileReader.java
 (original)
+++ 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/AbstractHFileReader.java
 Mon Oct 14 03:59:44 2013
@@ -354,4 +354,9 @@ public abstract class AbstractHFileReade
   public DataBlockEncoding getEncodingOnDisk() {
     return dataBlockEncoder.getEncodingOnDisk();
   }
+
+  @Override
+  public boolean hasMVCCInfo() {
+    return true;
+  }
 }

Modified: 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java?rev=1531792&r1=1531791&r2=1531792&view=diff
==============================================================================
--- 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java 
(original)
+++ 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/io/hfile/HFile.java 
Mon Oct 14 03:59:44 2013
@@ -522,6 +522,8 @@ public class HFile {
     void close(boolean evictOnClose) throws IOException;
 
     DataBlockEncoding getEncodingOnDisk();
+
+    boolean hasMVCCInfo();
   }
 
   /**

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=1531792&r1=1531791&r2=1531792&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
 Mon Oct 14 03:59:44 2013
@@ -371,6 +371,11 @@ public class HFileReaderV2 extends Abstr
     }
   }
 
+  @Override
+  public boolean hasMVCCInfo() {
+    return includesMemstoreTS && decodeMemstoreTS;
+  }
+
   /**
    * Compares the actual type of a block retrieved from cache or disk with its
    * expected type and throws an exception in case of a mismatch. Expected

Modified: 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java?rev=1531792&r1=1531791&r2=1531792&view=diff
==============================================================================
--- 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
 (original)
+++ 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
 Mon Oct 14 03:59:44 2013
@@ -1424,7 +1424,7 @@ public class StoreFile extends SchemaCon
                                                boolean isCompaction) {
       return new StoreFileScanner(this,
                                  getScanner(cacheBlocks, pread,
-                                            isCompaction), !isCompaction);
+                                            isCompaction), !isCompaction, 
reader.hasMVCCInfo());
     }
 
     /**

Modified: 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
URL: 
http://svn.apache.org/viewvc/hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java?rev=1531792&r1=1531791&r2=1531792&view=diff
==============================================================================
--- 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
 (original)
+++ 
hbase/branches/0.94/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
 Mon Oct 14 03:59:44 2013
@@ -51,6 +51,7 @@ public class StoreFileScanner implements
   private KeyValue delayedSeekKV;
 
   private boolean enforceMVCC = false;
+  private boolean hasMVCCInfo = false;
 
   private static AtomicLong seekCount;
 
@@ -60,10 +61,11 @@ public class StoreFileScanner implements
    * Implements a {@link KeyValueScanner} on top of the specified {@link 
HFileScanner}
    * @param hfs HFile scanner
    */
-  public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean 
useMVCC) {
+  public StoreFileScanner(StoreFile.Reader reader, HFileScanner hfs, boolean 
useMVCC, boolean hasMVCC) {
     this.reader = reader;
     this.hfs = hfs;
     this.enforceMVCC = useMVCC;
+    this.hasMVCCInfo = hasMVCC;
   }
 
   /**
@@ -124,7 +126,8 @@ public class StoreFileScanner implements
       if (cur != null) {
         hfs.next();
         cur = hfs.getKeyValue();
-        skipKVsNewerThanReadpoint();
+        if (hasMVCCInfo)
+          skipKVsNewerThanReadpoint();
       }
     } catch(IOException e) {
       throw new IOException("Could not iterate " + this, e);
@@ -144,7 +147,7 @@ public class StoreFileScanner implements
 
         cur = hfs.getKeyValue();
 
-        return skipKVsNewerThanReadpoint();
+        return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint();
       } finally {
         realSeekDone = true;
       }
@@ -164,7 +167,7 @@ public class StoreFileScanner implements
         }
         cur = hfs.getKeyValue();
 
-        return skipKVsNewerThanReadpoint();
+        return !hasMVCCInfo ? true : skipKVsNewerThanReadpoint();
       } finally {
         realSeekDone = true;
       }


Reply via email to