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