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) {