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;
   }
 }