You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by jg...@apache.org on 2011/10/14 00:56:18 UTC

svn commit: r1183155 - in /hbase/trunk: ./ src/main/java/org/apache/hadoop/hbase/regionserver/

Author: jgray
Date: Thu Oct 13 22:56:18 2011
New Revision: 1183155

URL: http://svn.apache.org/viewvc?rev=1183155&view=rev
Log:
HBASE-4469  Avoid top row seek by looking up bloomfilter (liyin via jgray)

Modified:
    hbase/trunk/CHANGES.txt
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
    hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java

Modified: hbase/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/hbase/trunk/CHANGES.txt?rev=1183155&r1=1183154&r2=1183155&view=diff
==============================================================================
--- hbase/trunk/CHANGES.txt (original)
+++ hbase/trunk/CHANGES.txt Thu Oct 13 22:56:18 2011
@@ -15,6 +15,7 @@ Release 0.93.0 - Unreleased
    HBASE-4422  Move block cache parameters and references into single
                CacheConf class (jgray)
    HBASE-4102  atomicAppend: A put that appends to the latest version of a cell (Lars H)
+   HBASE-4469  Avoid top row seek by looking up bloomfilter (liyin via jgray)
 
   BUG FIXES
    HBASE-4488  Store could miss rows during flush (Lars H via jgray)

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java?rev=1183155&r1=1183154&r2=1183155&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java Thu Oct 13 22:56:18 2011
@@ -76,7 +76,7 @@ public class ScanQueryMatcher {
     this.rowComparator = rowComparator;
     this.deletes =  new ScanDeleteTracker();
     this.stopRow = scan.getStopRow();
-    this.startKey = KeyValue.createFirstOnRow(scan.getStartRow());
+    this.startKey = KeyValue.createFirstOnRow(scan.getStartRow(), family, null);
     this.filter = scan.getFilter();
     this.retainDeletesInOutput = retainDeletesInOutput;
 

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java?rev=1183155&r1=1183154&r2=1183155&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java Thu Oct 13 22:56:18 2011
@@ -50,6 +50,11 @@ class StoreFileScanner implements KeyVal
   private boolean delayedReseek;
   private KeyValue delayedSeekKV;
 
+  //The variable, realSeekDone, may cheat on store file scanner for the
+  // multi-column bloom-filter optimization.
+  // So this flag shows whether this storeFileScanner could do a reseek.
+  private boolean isReseekable = false;
+
   private static final AtomicLong seekCount = new AtomicLong();
 
   /**
@@ -108,6 +113,8 @@ class StoreFileScanner implements KeyVal
           close();
           return false;
         }
+
+        this.isReseekable = true;
         cur = hfs.getKeyValue();
         return true;
       } finally {
@@ -269,7 +276,7 @@ class StoreFileScanner implements KeyVal
     if (realSeekDone)
       return;
 
-    if (delayedReseek) {
+    if (delayedReseek && this.isReseekable) {
       reseek(delayedSeekKV);
     } else {
       seek(delayedSeekKV);

Modified: hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
URL: http://svn.apache.org/viewvc/hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java?rev=1183155&r1=1183154&r2=1183155&view=diff
==============================================================================
--- hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java (original)
+++ hbase/trunk/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java Thu Oct 13 22:56:18 2011
@@ -98,9 +98,11 @@ class StoreScanner extends NonLazyKeyVal
 
     // Seek all scanners to the start of the Row (or if the exact matching row
     // key does not exist, then to the start of the next matching Row).
+    // Always check bloom filter to optimize the top row seek for delete
+    // family marker.
     if (explicitColumnQuery && lazySeekEnabledGlobally) {
       for (KeyValueScanner scanner : scanners) {
-        scanner.requestSeek(matcher.getStartKey(), false, useRowColBloom);
+        scanner.requestSeek(matcher.getStartKey(), false, true);
       }
     } else {
       for (KeyValueScanner scanner : scanners) {