You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hbase.apache.org by ap...@apache.org on 2016/07/22 01:15:59 UTC
[3/7] hbase git commit: HBASE-13704 Hbase throws
OutOfOrderScannerNextException when MultiRowRangeFilter is used (Aleksandr
Maksymenko)
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/abe1168d
Tree: http://git-wip-us.apache.org/repos/asf/hbase/tree/abe1168d
Diff: http://git-wip-us.apache.org/repos/asf/hbase/diff/abe1168d
Branch: refs/heads/0.98
Commit: abe1168ddff7e0e08921480fdf0b3aecaef63034
Parents: b2d883d
Author: tedyu <yu...@gmail.com>
Authored: Tue May 19 20:21:08 2015 -0700
Committer: Andrew Purtell <ap...@apache.org>
Committed: Thu Jul 21 17:50:46 2016 -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/abe1168d/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 bd880a0..1ac9693 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/abe1168d/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 c2d25de..7ecc29c 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));