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