hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Anoop Sam John (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-7337) SingleColumnValueFilter seems to get unavailble data
Date Fri, 14 Dec 2012 04:42:12 GMT

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

Anoop Sam John commented on HBASE-7337:
---------------------------------------

bq. then i set latestVersionOnly to false, the result does no change.
latestVersionOnly in SCVF is not for determining what will get returned by the Scan. This
specifies which value of a row column to be checked in case of multiple versions available
for the cell. When latestVersionOnly = true, only the latest version value will get checked
and so in your case only if the latest version value is "2" that row will get selected. When
latestVersionOnly =false, it will check all the versions and if any of the version value is
"2" that row will get selected.

BTW how is the Scan object? I guess you have set in Scan to get all the versions.

SCVF will not decide how many versions of a cell to be send back to client. It just checks
the cell value with the value specified.
                
> SingleColumnValueFilter seems to get unavailble data
> ----------------------------------------------------
>
>                 Key: HBASE-7337
>                 URL: https://issues.apache.org/jira/browse/HBASE-7337
>             Project: HBase
>          Issue Type: Bug
>          Components: Filters
>    Affects Versions: 0.94.3, 0.96.0
>         Environment: 0.94
>            Reporter: Zhou wenjian
>            Assignee: Zhou wenjian
>             Fix For: 0.96.0, 0.94.4
>
>
> put multi versions of a row.
> r1 cf:q  version:1 value:1
> r1 cf:q  version:2 value:3
> r1 cf:q  version:3 value:2
> the filter in scan is set as below:
> SingleColumnValueFilter valueF = new SingleColumnValueFilter(
>         family,qualifier,CompareOp.EQUAL,new BinaryComparator(Bytes
> .toBytes("2")));
> then i found all of the three versions will be emmitted, then i set latestVersionOnly
to false, the result does no change.
>   public ReturnCode filterKeyValue(KeyValue keyValue) {
>     // System.out.println("REMOVE KEY=" + keyValue.toString() + ", value=" + Bytes.toString(keyValue.getValue()));
>     if (this.matchedColumn) {
>       // We already found and matched the single column, all keys now pass
>       return ReturnCode.INCLUDE;
>     } else if (this.latestVersionOnly && this.foundColumn) {
>       // We found but did not match the single column, skip to next row
>       return ReturnCode.NEXT_ROW;
>     }
>     if (!keyValue.matchingColumn(this.columnFamily, this.columnQualifier)) {
>       return ReturnCode.INCLUDE;
>     }
>     foundColumn = true;
>     if (filterColumnValue(keyValue.getBuffer(),
>         keyValue.getValueOffset(), keyValue.getValueLength())) {
>       return this.latestVersionOnly? ReturnCode.NEXT_ROW: ReturnCode.INCLUDE;
>     }
>     this.matchedColumn = true;
>     return ReturnCode.INCLUDE;
>   }
> From the code above, it seeems that version 3 will be first emmited, and set matchedColumn
to true, which leads the following version 2 and 1 emmited too.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Mime
View raw message