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 ddbd4a7..13e05aa 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 @@ -303,7 +303,7 @@ final public class FilterList extends Filter { case INCLUDE_AND_NEXT_COL: return !CellUtil.matchingRowColumn(prevCell, currentCell); case NEXT_ROW: - return !CellUtil.matchingRow(prevCell, currentCell); + return !CellUtil.matchingRow(prevCell, currentCell) || !CellUtil.matchingFamily(prevCell, currentCell); default: throw new IllegalStateException("Received code is not valid."); } diff --git a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java index 994adff..954f603 100644 --- a/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java +++ b/hbase-server/src/test/java/org/apache/hadoop/hbase/filter/TestFilterList.java @@ -669,5 +669,19 @@ public class TestFilterList { filter.filterKeyValue(kv4); assertTrue(mockFilter.didCellPassToTheFilter); } + + @Test + public void testFamilyFilterWithMustPassOne() throws IOException{ + byte[] CF1 = Bytes.toBytes("cf1"); + byte[] CF2 = Bytes.toBytes("cf2"); + FamilyFilter filterCF1 = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(CF1)); + FamilyFilter filterCF2 = new FamilyFilter(CompareFilter.CompareOp.EQUAL, new BinaryComparator(CF2)); + + FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ONE); + filterList.addFilter(filterCF1); + filterList.addFilter(filterCF2); + assertEquals(filterList.filterKeyValue(new KeyValue(CF1,CF1,CF1)), ReturnCode.INCLUDE); + assertEquals(filterList.filterKeyValue(new KeyValue(CF1,CF2,CF2)), ReturnCode.INCLUDE); + } }