You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by li...@apache.org on 2014/02/26 20:18:39 UTC
svn commit: r1572207 - in
/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase:
regionserver/ScanQueryMatcher.java util/Bytes.java
Author: liyin
Date: Wed Feb 26 19:18:38 2014
New Revision: 1572207
URL: http://svn.apache.org/r1572207
Log:
[HBASE-10538] Fix testcase TestBlocksRead
Author: daviddeng
Summary: In `ScanQueryMatchr.moreRowsMayExistAfter`, a line is added espcially for get-scan. This is an optimization to reduce a read call and thus survive the testcase.
Test Plan: Run TestBlocksRead
Reviewers: manukranthk, rshroff, liyintang
Reviewed By: rshroff
CC: hbase-eng@
Differential Revision: https://phabricator.fb.com/D1187772
Task ID: 3790918
Modified:
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/Bytes.java
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java?rev=1572207&r1=1572206&r2=1572207&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java Wed Feb 26 19:18:38 2014
@@ -20,6 +20,10 @@
package org.apache.hadoop.hbase.regionserver;
+import java.io.IOException;
+import java.util.List;
+import java.util.NavigableSet;
+
import org.apache.hadoop.hbase.HConstants;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Scan;
@@ -29,10 +33,6 @@ import org.apache.hadoop.hbase.io.TimeRa
import org.apache.hadoop.hbase.regionserver.DeleteTracker.DeleteResult;
import org.apache.hadoop.hbase.util.Bytes;
-import java.io.IOException;
-import java.util.List;
-import java.util.NavigableSet;
-
/**
* A query matcher that is specifically designed for the scan case.
*/
@@ -321,15 +321,23 @@ public class ScanQueryMatcher {
}
public boolean moreRowsMayExistAfter(KeyValue kv) {
- if (!Bytes.equals(stopRow , HConstants.EMPTY_END_ROW) &&
- rowComparator.compareRows(kv.getBuffer(),kv.getRowOffset(),
+ if (Bytes.equals(stopRow , HConstants.EMPTY_END_ROW)) {
+ // No stopRow specified
+ return true;
+ }
+ if (rowComparator.compareRows(kv.getBuffer(),kv.getRowOffset(),
kv.getRowLength(), stopRow, 0, stopRow.length) >= 0) {
// KV >= STOPROW
// then NO there is nothing left.
return false;
- } else {
- return true;
}
+ if (Bytes.isNext(kv.getBuffer(), kv.getRowOffset(), kv.getRowLength(),
+ stopRow, 0, stopRow.length)) {
+ // stopRow == Bytes.nextOf(kv), nothing left, too
+ return false;
+ }
+
+ return true;
}
/**
Modified: hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/Bytes.java
URL: http://svn.apache.org/viewvc/hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/Bytes.java?rev=1572207&r1=1572206&r2=1572207&view=diff
==============================================================================
--- hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/Bytes.java (original)
+++ hbase/branches/0.89-fb/src/main/java/org/apache/hadoop/hbase/util/Bytes.java Wed Feb 26 19:18:38 2014
@@ -1517,16 +1517,24 @@ public class Bytes {
* Return whether b equals nextOf(a)
*/
public static boolean isNext(byte[] a, byte[] b) {
+ return isNext(a, 0, a.length, b, 0, b.length);
+ }
+
+ /**
+ * Return whether b[...] equals nextOf(a[...])
+ */
+ public static boolean isNext(byte[] a, int aOffs, int aLen, byte[] b,
+ int bOffs, int bLen) {
if (a == null || b == null) {
return false;
}
- if (b.length != a.length + 1) {
+ if (bLen != aLen + 1) {
return false;
}
- if (b[a.length] != 0) {
+ if (b[bOffs + aLen] != 0) {
return false;
}
- return Bytes.compareTo(a, 0, a.length, b, 0, a.length) == 0;
+ return Bytes.compareTo(a, aOffs, aLen, b, bOffs, aLen) == 0;
}
}