Repository: hbase
Updated Branches:
refs/heads/branch-1.0 fd55483bc -> a55842a0a
HBASE-14221 - Reduce the number of time row comparison is done in a Scan
(Ram)
Conflicts:
hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/cccf8e6a
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/cccf8e6a
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/cccf8e6a
Branch: refs/heads/branch-1.0
Commit: cccf8e6a4a791aa94e738f42370b4f7e1f90353a
Parents: 5d854d3
Author: ramkrishna <[email protected]>
Authored: Fri Jan 8 13:58:52 2016 +0530
Committer: ramkrishna <[email protected]>
Committed: Fri Jan 8 14:02:39 2016 +0530
----------------------------------------------------------------------
.../hbase/regionserver/ScanQueryMatcher.java | 32 +++++++++++---------
.../hadoop/hbase/regionserver/StoreScanner.java | 20 ++++++++++--
2 files changed, 35 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hbase/blob/cccf8e6a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
----------------------------------------------------------------------
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
index 032b4ce..901dbad 100644
---
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
+++
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/ScanQueryMatcher.java
@@ -278,23 +278,27 @@ public class ScanQueryMatcher {
if (filter != null && filter.filterAllRemaining()) {
return MatchCode.DONE_SCAN;
}
- int ret = this.rowComparator.compareRows(row, this.rowOffset,
this.rowLength,
+ if (row != null) {
+ int ret = this.rowComparator.compareRows(row, this.rowOffset,
this.rowLength,
cell.getRowArray(), cell.getRowOffset(), cell.getRowLength());
- if (!this.isReversed) {
- if (ret <= -1) {
- return MatchCode.DONE;
- } else if (ret >= 1) {
- // could optimize this, if necessary?
- // Could also be called SEEK_TO_CURRENT_ROW, but this
- // should be rare/never happens.
- return MatchCode.SEEK_NEXT_ROW;
+ if (!this.isReversed) {
+ if (ret <= -1) {
+ return MatchCode.DONE;
+ } else if (ret >= 1) {
+ // could optimize this, if necessary?
+ // Could also be called SEEK_TO_CURRENT_ROW, but this
+ // should be rare/never happens.
+ return MatchCode.SEEK_NEXT_ROW;
+ }
+ } else {
+ if (ret <= -1) {
+ return MatchCode.SEEK_NEXT_ROW;
+ } else if (ret >= 1) {
+ return MatchCode.DONE;
+ }
}
} else {
- if (ret <= -1) {
- return MatchCode.SEEK_NEXT_ROW;
- } else if (ret >= 1) {
- return MatchCode.DONE;
- }
+ return MatchCode.DONE;
}
// optimize case.
http://git-wip-us.apache.org/repos/asf/hbase/blob/cccf8e6a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
----------------------------------------------------------------------
diff --git
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
index 94e94d8..b983b12 100644
---
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
+++
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreScanner.java
@@ -474,8 +474,7 @@ public class StoreScanner extends
NonReversedNonLazyKeyValueScanner
byte[] row = cell.getRowArray();
int offset = cell.getRowOffset();
short length = cell.getRowLength();
- if (limit < 0 || matcher.row == null || !Bytes.equals(row, offset, length,
matcher.row,
- matcher.rowOffset, matcher.rowLength)) {
+ if (limit < 0 || matcher.row == null) {
this.countPerRow = 0;
matcher.setRow(row, offset, length);
}
@@ -512,6 +511,10 @@ public class StoreScanner extends
NonReversedNonLazyKeyValueScanner
if (!matcher.moreRowsMayExistAfter(cell)) {
return false;
}
+ // Setting the matcher.row = null, will mean that after the
subsequent seekToNextRow()
+ // the heap.peek() will any way be in the next row. So the
SQM.match(cell) need do
+ // another compareRow to say the current row is DONE
+ matcher.row = null;
seekToNextRow(cell);
break LOOP;
}
@@ -532,6 +535,10 @@ public class StoreScanner extends
NonReversedNonLazyKeyValueScanner
if (!matcher.moreRowsMayExistAfter(cell)) {
return false;
}
+ // Setting the matcher.row = null, will mean that after the
subsequent seekToNextRow()
+ // the heap.peek() will any way be in the next row. So the
SQM.match(cell) need do
+ // another compareRow to say the current row is DONE
+ matcher.row = null;
seekToNextRow(cell);
} else if (qcode ==
ScanQueryMatcher.MatchCode.INCLUDE_AND_SEEK_NEXT_COL) {
seekAsDirection(matcher.getKeyForNextColumn(cell));
@@ -545,6 +552,10 @@ public class StoreScanner extends
NonReversedNonLazyKeyValueScanner
continue;
case DONE:
+ // We are sure that this row is done and we are in the next row.
+ // So subsequent StoresScanner.next() call need not do another
compare
+ // and set the matcher.row
+ matcher.row = null;
return true;
case DONE_SCAN:
@@ -557,7 +568,10 @@ public class StoreScanner extends
NonReversedNonLazyKeyValueScanner
if (!matcher.moreRowsMayExistAfter(cell)) {
return false;
}
-
+ // Setting the matcher.row = null, will mean that after the
subsequent seekToNextRow()
+ // the heap.peek() will any way be in the next row. So the
SQM.match(cell) need do
+ // another compareRow to say the current row is DONE
+ matcher.row = null;
seekToNextRow(cell);
break;