You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@hbase.apache.org by "Anoop Sam John (JIRA)" <ji...@apache.org> on 2012/12/28 06:18:14 UTC

[jira] [Commented] (HBASE-5664) CP hooks in Scan flow for fast forward when filter filters out a row

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

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

This is needed in the Secondary index solution
The scenario is as below
Having 2 conditions in FilterList with MUST_PASS_ALL
One SCVF on column cf1:c1 and another scvf on column cf1:c2
Suppose there is only one index on column cf1:c1
Now based on the data got from the index table we will seek to the exact row where cf1:c1=?. But dont know what is the value of cf1:c2 there in that row.
Now the second filter may filter out this row.
As per the logic in HRegion.nextInternal() it will start a loop there and taking next row onwards till finding a row satisfying both conditions

Now as the condition in FL is MUST_PASS_ALL, there is no point in continuing with all the rows. The next row satisfying the condition on column cf1:c1 , we can know from the index data and so we can make a seek to that row directly and check that.

Now there is no way to do so. It will be good to provide a CP hook for this so that within that hook I can reseek to the exact row key.

                
> CP hooks in Scan flow for fast forward when filter filters out a row
> --------------------------------------------------------------------
>
>                 Key: HBASE-5664
>                 URL: https://issues.apache.org/jira/browse/HBASE-5664
>             Project: HBase
>          Issue Type: Improvement
>          Components: Coprocessors
>    Affects Versions: 0.92.1
>            Reporter: Anoop Sam John
>            Assignee: Anoop Sam John
>             Fix For: 0.96.0
>
>
> In HRegion.nextInternal(int limit, String metric)
> 	We have while(true) loop so as to fetch a next result which satisfies filter condition. When Filter filters out the current fetched row we call nextRow(byte [] currentRow) before going with the next row.
> {code}	
> if (results.isEmpty() || filterRow()) {
>             // this seems like a redundant step - we already consumed the row
>             // there're no left overs.
>             // the reasons for calling this method are:
>             // 1. reset the filters.
>             // 2. provide a hook to fast forward the row (used by subclasses)
>             nextRow(currentRow);
> {code}
> // 2. provide a hook to fast forward the row (used by subclasses)
> We can provide same feature of fast forward support for the CP also.

--
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