You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hbase.apache.org by "Aleksandr Maksymenko (JIRA)" <ji...@apache.org> on 2015/05/18 11:56:00 UTC

[jira] [Created] (HBASE-13705) MultiRowRangeFilter seems to be working incorrect if RowRange.startRowInclusive = false

Aleksandr Maksymenko created HBASE-13705:
--------------------------------------------

             Summary: 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. 
What happens in MultiRowRangeFilter.filterRowKey (worth case is described):
1. Line 91: Check if current range contains a row. Let's follow the case if 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 ignored.
4. Line 105: Check if EXCLUSIVE == true, if so skip this row.
The problem: we've skipped first row we got, but we never checked if this row is a RowRange.startRow . In distributed system may not get RowRange.startRow on this instance, so we'll exclude some other 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)