diff --git a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java index f9722d3..5dc3582 100644 --- a/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java +++ b/hbase-client/src/main/java/org/apache/hadoop/hbase/filter/FamilyFilter.java @@ -66,7 +66,7 @@ public class FamilyFilter extends CompareFilter { if (familyLength > 0) { if (doCompare(this.compareOp, this.comparator, v.getFamilyArray(), v.getFamilyOffset(), familyLength)) { - return ReturnCode.NEXT_ROW; + return ReturnCode.SKIP; } } return ReturnCode.INCLUDE; 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); + } }