[
https://issues.apache.org/jira/browse/HBASE-13705?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Ted Yu resolved HBASE-13705.
----------------------------
Resolution: Not A Problem
> 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)