[ 
https://issues.apache.org/jira/browse/HBASE-18368?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16085068#comment-16085068
 ] 

Allan Yang edited comment on HBASE-18368 at 7/13/17 2:42 AM:
-------------------------------------------------------------

{quote}
NEXT_ROW can work is because there is regionscanner and store scanner, next_row 
affect store scanner. 
When one storescanner switch to next row, the region scanner switch to the next 
storescanner, the second store scanner will continue check the current row. 
That why the change can be more efficiency.
{quote}
It makes sense, we shouldn't revert this optimization. The problem is that 
filters are only be reset after row change. HBASE-17678 introduce a list to 
store the previous code and cell, but it does not consider the family doesn't 
match case(change to another storescanner). update a V2 patch to fix this.


was (Author: allan163):
{quote}
NEXT_ROW can work is because there is regionscanner and store scanner, next_row 
affect store scanner. 
When one storescanner switch to next row, the region scanner switch to the next 
storescanner, the second store scanner will continue check the current row. 
That why the change can be more efficiency.
{quote}
It make sense, we shouldn't revert this optimization. The problem is that 
filters are only be reset after row change. HBASE-17678 introduce a list to 
store the previous code and cell, but it does not consider the family doesn't 
match case. update a V2 patch to fix this.

> FamilyFilters with OR does not work
> -----------------------------------
>
>                 Key: HBASE-18368
>                 URL: https://issues.apache.org/jira/browse/HBASE-18368
>             Project: HBase
>          Issue Type: Bug
>          Components: Filters
>    Affects Versions: 3.0.0, 2.0.0-alpha-1
>            Reporter: Peter Somogyi
>            Assignee: Allan Yang
>            Priority: Critical
>         Attachments: HBASE-18368.branch-1.patch, HBASE-18368.branch-1.v2.patch
>
>
> Scan gives back incomplete list if multiple filters are combined with OR / 
> MUST_PASS_ONE.
> Using 2 FamilyFilters in a FilterList using MUST_PASS_ONE operator will give 
> back results for only the first Filter.
> {code:java|title=Test code}
>   @Test
>   public void testFiltersWithOr() throws Exception {
>     TableName tn = TableName.valueOf("MyTest");
>     Table table = utility.createTable(tn, new String[] {"cf1", "cf2"});
>     byte[] CF1 = Bytes.toBytes("cf1");
>     byte[] CF2 = Bytes.toBytes("cf2");
>     Put put1 = new Put(Bytes.toBytes("0"));
>     put1.addColumn(CF1, Bytes.toBytes("col_a"), Bytes.toBytes(0));
>     table.put(put1);
>     Put put2 = new Put(Bytes.toBytes("0"));
>     put2.addColumn(CF2, Bytes.toBytes("col_b"), Bytes.toBytes(0));
>     table.put(put2);
>     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);
>     Scan scan = new Scan();
>     scan.setFilter(filterList);
>     ResultScanner scanner = table.getScanner(scan);
>     System.out.println(filterList);
>     for (Result rr = scanner.next(); rr != null; rr = scanner.next()) {
>       System.out.println(rr);
>     }
>   }
> {code}
> {noformat:title=Output}
> FilterList OR (2/2): [FamilyFilter (EQUAL, cf1), FamilyFilter (EQUAL, cf2)]
> keyvalues={0/cf1:col_a/1499852754957/Put/vlen=4/seqid=0}
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to