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 <ramkrishna.s.vasude...@gmail.com>
Authored: Fri Jan 8 13:58:52 2016 +0530
Committer: ramkrishna <ramkrishna.s.vasude...@gmail.com>
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;
 

Reply via email to