Index: hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java =================================================================== --- hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java (revision 1590816) +++ hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FilterList.java (working copy) @@ -68,6 +68,7 @@ private Operator operator = Operator.MUST_PASS_ALL; private List filters = new ArrayList(); private Filter seekHintFilter = null; + private Boolean hasFilterRow = null; /** Reference Cell used by {@link #transformCell(Cell)} for validation purpose. */ private Cell referenceKV = null; @@ -173,6 +174,7 @@ filter.reset(); } seekHintFilter = null; + hasFilterRow = null; } @Override @@ -345,16 +347,22 @@ @Override public boolean hasFilterRow() { + if (hasFilterRow != null) return hasFilterRow; for (Filter filter : filters) { - if(filter.hasFilterRow()) { - return true; + if (filter.hasFilterRow()) { + hasFilterRow = true; + break; } } - return false; + if (hasFilterRow == null) hasFilterRow = false; + return hasFilterRow; } @Override public boolean filterRow() throws IOException { + if (hasFilterRow != null && !hasFilterRow.booleanValue()) { + return false; + } for (Filter filter : filters) { if (operator == Operator.MUST_PASS_ALL) { if (filter.filterRow()) { @@ -366,7 +374,7 @@ } } } - return operator == Operator.MUST_PASS_ONE; + return operator == Operator.MUST_PASS_ONE; } /**