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)