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)

Reply via email to