You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by te...@apache.org on 2015/05/20 05:21:27 UTC

hbase git commit: HBASE-13704 Hbase throws OutOfOrderScannerNextException when MultiRowRangeFilter is used (Aleksandr Maksymenko)

Repository: hbase
Updated Branches:
  refs/heads/branch-1 2a1fab020 -> 181ec6051


HBASE-13704 Hbase throws OutOfOrderScannerNextException when MultiRowRangeFilter is used (Aleksandr Maksymenko)


Project: http://git-wip-us.apache.org/repos/asf/hbase/repo
Commit: http://git-wip-us.apache.org/repos/asf/hbase/commit/181ec605
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/181ec605
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/181ec605

Branch: refs/heads/branch-1
Commit: 181ec60510b502fc3fff890e8c9236a95a80832f
Parents: 2a1fab0
Author: tedyu <yu...@gmail.com>
Authored: Tue May 19 20:21:08 2015 -0700
Committer: tedyu <yu...@gmail.com>
Committed: Tue May 19 20:21:08 2015 -0700

----------------------------------------------------------------------
 .../hadoop/hbase/filter/MultiRowRangeFilter.java |  6 ++++--
 .../hbase/filter/TestMultiRowRangeFilter.java    | 19 +++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/hbase/blob/181ec605/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
----------------------------------------------------------------------
diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
index 4005f38..24c8135 100644
--- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
+++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/MultiRowRangeFilter.java
@@ -102,7 +102,7 @@ public class MultiRowRangeFilter extends FilterBase {
       } else {
         range = rangeList.get(0);
       }
-      if(EXCLUSIVE) {
+      if (EXCLUSIVE) {
         EXCLUSIVE = false;
         currentReturnCode = ReturnCode.NEXT_ROW;
         return false;
@@ -115,7 +115,9 @@ public class MultiRowRangeFilter extends FilterBase {
         }
         initialized = true;
       } else {
-        currentReturnCode = ReturnCode.SEEK_NEXT_USING_HINT;
+        if (range.contains(buffer, offset, length)) {
+          currentReturnCode = ReturnCode.INCLUDE;
+        } else currentReturnCode = ReturnCode.SEEK_NEXT_USING_HINT;
       }
     } else {
       currentReturnCode = ReturnCode.INCLUDE;

http://git-wip-us.apache.org/repos/asf/hbase/blob/181ec605/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java
----------------------------------------------------------------------
diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java
index 6bc089f..0c596aa 100644
--- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java
+++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestMultiRowRangeFilter.java
@@ -21,6 +21,7 @@ import static org.junit.Assert.assertEquals;
 
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.commons.logging.Log;
@@ -69,6 +70,24 @@ public class TestMultiRowRangeFilter {
   }
 
   @Test
+  public void testOutOfOrderScannerNextException() throws Exception {
+    MultiRowRangeFilter filter = new MultiRowRangeFilter(Arrays.asList(
+            new MultiRowRangeFilter.RowRange(Bytes.toBytes("b"), true, Bytes.toBytes("c"), true),
+            new MultiRowRangeFilter.RowRange(Bytes.toBytes("d"), true, Bytes.toBytes("e"), true)
+    ));
+    filter.filterRowKey(Bytes.toBytes("a"), 0, 1);
+    assertEquals(Filter.ReturnCode.SEEK_NEXT_USING_HINT, filter.filterKeyValue(null));
+    filter.filterRowKey(Bytes.toBytes("b"), 0, 1);
+    assertEquals(Filter.ReturnCode.INCLUDE, filter.filterKeyValue(null));
+    filter.filterRowKey(Bytes.toBytes("c"), 0, 1);
+    assertEquals(Filter.ReturnCode.INCLUDE, filter.filterKeyValue(null));
+    filter.filterRowKey(Bytes.toBytes("d"), 0, 1);
+    assertEquals(Filter.ReturnCode.INCLUDE, filter.filterKeyValue(null));
+    filter.filterRowKey(Bytes.toBytes("e"), 0, 1);
+    assertEquals(Filter.ReturnCode.INCLUDE, filter.filterKeyValue(null));
+  }
+
+  @Test
   public void testMergeAndSortWithEmptyStartRow() throws IOException {
     List<RowRange> ranges = new ArrayList<RowRange>();
     ranges.add(new RowRange(Bytes.toBytes(""), true, Bytes.toBytes(20), false));