hbase-issues mailing list archives

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

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

Ted Yu commented on HBASE-13705:
--------------------------------

For the first issue, RowRange has this method:
{code}
    public int compareTo(RowRange other) {
      return Bytes.compareTo(this.startRow, other.startRow);
{code}
When Collections.binarySearch(rangeList, temp) finds the RowRange, we know rowKey matches
the start row of the RowRange.

Maybe I missed something ...

> 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
(v6.3.4#6332)

Mime
View raw message