diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java index 8ba1ccb..82d71bf 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java @@ -254,6 +254,7 @@ final public class FilterList extends Filter { ReturnCode rc = operator == Operator.MUST_PASS_ONE? ReturnCode.SKIP: ReturnCode.INCLUDE; int listize = filters.size(); + boolean seenNonHintReturnCode = false; for (int i = 0; i < listize; i++) { Filter filter = filters.get(i); if (operator == Operator.MUST_PASS_ALL) { @@ -279,7 +280,11 @@ final public class FilterList extends Filter { continue; } - switch (filter.filterKeyValue(c)) { + ReturnCode localRC = filter.filterKeyValue(c); + if (localRC != ReturnCode.SEEK_NEXT_USING_HINT) { + seenNonHintReturnCode = true; + } + switch (localRC) { case INCLUDE: if (rc != ReturnCode.INCLUDE_AND_NEXT_COL) { rc = ReturnCode.INCLUDE; @@ -308,6 +313,9 @@ final public class FilterList extends Filter { // Save the transformed Cell for transform(): this.transformedCell = transformed; + if (operator == Operator.MUST_PASS_ONE && !seenNonHintReturnCode) { + return ReturnCode.SEEK_NEXT_USING_HINT; + } return rc; } 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 5f9c833..cb2c48c 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 @@ -136,6 +136,10 @@ public class MultiRowRangeFilter extends FilterBase { @Override public Cell getNextCellHint(Cell currentKV) { + if (done == true) { + // set the max value as the next cell hint + return KeyValueUtil.createFirstOnRow(Bytes.toBytes(Long.MAX_VALUE)); + } // skip to the next range's start row return KeyValueUtil.createFirstOnRow(range.startRow); }