You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by st...@apache.org on 2014/03/24 22:48:39 UTC
svn commit: r1581081 - in
/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase:
io/HalfStoreFileReader.java regionserver/StoreFile.java
regionserver/StoreFileScanner.java
Author: stack
Date: Mon Mar 24 21:48:38 2014
New Revision: 1581081
URL: http://svn.apache.org/r1581081
Log:
HBASE-10819 (HBASE-10819) Backport HBASE-8063 (Filter HFiles based on first/last key) into 0.96
Modified:
hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java
hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
Modified: hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java?rev=1581081&r1=1581080&r2=1581081&view=diff
==============================================================================
--- hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java (original)
+++ hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/io/HalfStoreFileReader.java Mon Mar 24 21:48:38 2014
@@ -28,6 +28,7 @@ import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
+import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.io.hfile.CacheConfig;
import org.apache.hadoop.hbase.io.hfile.HFileScanner;
import org.apache.hadoop.hbase.regionserver.StoreFile;
@@ -282,7 +283,12 @@ public class HalfStoreFileReader extends
}
};
}
-
+
+ @Override
+ public boolean passesKeyRangeFilter(Scan scan) {
+ return true;
+ }
+
@Override
public byte[] getLastKey() {
if (top) {
Modified: hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java?rev=1581081&r1=1581080&r2=1581081&view=diff
==============================================================================
--- hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java (original)
+++ hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFile.java Mon Mar 24 21:48:38 2014
@@ -1358,6 +1358,28 @@ public class StoreFile {
return true;
}
+ /**
+ * Checks whether the given scan rowkey range overlaps with the current storefile's
+ * @param scan the scan specification. Used to determine the rowkey range.
+ * @return true if there is overlap, false otherwise
+ */
+ public boolean passesKeyRangeFilter(Scan scan) {
+ if (this.getFirstKey() == null || this.getLastKey() == null) {
+ // the file is empty
+ return false;
+ }
+ if (Bytes.equals(scan.getStartRow(), HConstants.EMPTY_START_ROW)
+ && Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW)) {
+ return true;
+ }
+ KeyValue startKeyValue = KeyValue.createFirstOnRow(scan.getStartRow());
+ KeyValue stopKeyValue = KeyValue.createLastOnRow(scan.getStopRow());
+ boolean nonOverLapping = (getComparator().compareFlatKey(this.getFirstKey(),
+ stopKeyValue.getKey()) > 0 && !Bytes.equals(scan.getStopRow(), HConstants.EMPTY_END_ROW))
+ || getComparator().compareFlatKey(this.getLastKey(), startKeyValue.getKey()) < 0;
+ return !nonOverLapping;
+ }
+
public Map<byte[], byte[]> loadFileInfo() throws IOException {
Map<byte [], byte []> fi = reader.loadFileInfo();
Modified: hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java?rev=1581081&r1=1581080&r2=1581081&view=diff
==============================================================================
--- hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java (original)
+++ hbase/branches/0.96/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreFileScanner.java Mon Mar 24 21:48:38 2014
@@ -383,9 +383,8 @@ public class StoreFileScanner implements
}
@Override
- public boolean shouldUseScanner(Scan scan, SortedSet<byte[]> columns,
- long oldestUnexpiredTS) {
- return reader.passesTimerangeFilter(scan, oldestUnexpiredTS) &&
- reader.passesBloomFilter(scan, columns);
+ public boolean shouldUseScanner(Scan scan, SortedSet<byte[]> columns, long oldestUnexpiredTS) {
+ return reader.passesTimerangeFilter(scan, oldestUnexpiredTS)
+ && reader.passesKeyRangeFilter(scan) && reader.passesBloomFilter(scan, columns);
}
}