[ 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)