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

Zheng Hu commented on HBASE-20565:
----------------------------------

Add some log by debug.diff, and the result is shown in debug.log.  I think the 
bug is not from FilterList, but is from ColumnPaginationFilter#filterKeyValue. 

{code}
public ReturnCode filterKeyValue(Cell v)
  {
    if (columnOffset != null) {
      if (count >= limit) {
        return ReturnCode.NEXT_ROW;
      }
      byte[] buffer = v.getQualifierArray();
      if (buffer == null) {
        return ReturnCode.SEEK_NEXT_USING_HINT;
      }
      int cmp = 0;
      // Only compare if no KV's have been seen so far.
      if (count == 0) {
        cmp = Bytes.compareTo(buffer,
                              v.getQualifierOffset(),
                              v.getQualifierLength(),
                              this.columnOffset,
                              0,
                              this.columnOffset.length);
      }
      if (cmp < 0) {
        return ReturnCode.SEEK_NEXT_USING_HINT;
      } else {
        count++;
        return ReturnCode.INCLUDE_AND_NEXT_COL;
      }
    } else {
      if (count >= offset + limit) {
        return ReturnCode.NEXT_ROW;
      }

      ReturnCode code = count < offset ? ReturnCode.NEXT_COL :
                                         ReturnCode.INCLUDE_AND_NEXT_COL;
      count++;      <------------------- the count increment even if return 
NEXT_COL.
      return code;
    }
  }
{code}

The count increment even if we return NEXT_COL,  so after the filter checked 
the column=Family:0, count=1,  when filter is checking the column=Family:5,  
the count is 5 now, so return a NEXT_ROW... 

we should define our count as the number of included column in 
ColumnPaginationFilter (just as the def in if (columnOffset != null) {} ), 
rather than the index of column we encountered. ..


> ColumnRangeFilter combined with ColumnPaginationFilter can produce incorrect 
> result since 1.4
> ---------------------------------------------------------------------------------------------
>
>                 Key: HBASE-20565
>                 URL: https://issues.apache.org/jira/browse/HBASE-20565
>             Project: HBase
>          Issue Type: Bug
>          Components: Filters
>    Affects Versions: 1.4.4
>            Reporter: Jerry He
>            Assignee: Zheng Hu
>            Priority: Major
>         Attachments: debug.diff, debug.log, test-branch-1.4.patch
>
>
> When ColumnPaginationFilter is combined with ColumnRangeFilter, we may see 
> incorrect result.
> Here is a simple example.
> One row with 10 columns c0, c1, c2, .., c9.  I have a ColumnRangeFilter for 
> range c2 to c9.  Then I have a ColumnPaginationFilter with limit 5 and offset 
> 0.  FileterList is FilterList(Operator.MUST_PASS_ALL, ColumnRangeFilter, 
> ColumnPaginationFilter).
> We expect 5 columns being returned.  But in HBase 1.4 and after, 4 columns 
> are returned.
> In 1.2.x, the correct 5 columns are returned.



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to