hbase-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ramkrishna.s.vasudevan (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HBASE-13705) MultiRowRangeFilter seems to be working incorrect if RowRange.startRowInclusive = false
Date Mon, 18 May 2015 12:33:00 GMT

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

ramkrishna.s.vasudevan commented on HBASE-13705:

I think I get you now. You mean that though the rowKey is greater than the start row, we assume
that to be the startRow and we exclude it where as we should have included it as the rowKey
is > than the startRow. 

> MultiRowRangeFilter seems to be working incorrect if RowRange.startRowInclusive = false
> ---------------------------------------------------------------------------------------
>                 Key: HBASE-13705
>                 URL: https://issues.apache.org/jira/browse/HBASE-13705
>             Project: HBase
>          Issue Type: Bug
>    Affects Versions: 1.1.0
>            Reporter: Aleksandr Maksymenko
> I've found the issue during code review, so I don't have tests and I even didn't test
this case manualy. So I'll try to describe it in words.
> Pre-condition: we're using scan with MultiRowRangeFilter with some RowRange's with startRowInclusive
= false. This means that we want to include all rows that are strictly greater than startRow
(and less then stopRow, but it doesn't matter for now). 
> What happens in MultiRowRangeFilter.filterRowKey (worth case is described):
> 1. Line 91: Check if current range contains a row. Lets follow the case when it doesn't.
> 2. Line 94: Search for the next RowRange in method getNextRangeIndex.
> 3. Line 238: We've found a RowRange, check if startRowInclusive == false and set EXCLUSIVE
= true. This variable indicates if next row should be excluded.
> 4. Line 105: Check if EXCLUSIVE == true, if so skip this row.
> The problem: we've skipped first row we got in this range, but we never checked if this
row is a RowRange.startRow . In distributed system may not get RowRange.startRow on current
instance, so we may exclude some another row. Moreover, we may not have RowRange.startRow
at all in the DB, we will exclude some rows that are (possible) close to RowRange.startRow,
but not equals to it.

This message was sent by Atlassian JIRA

View raw message