Details
Description
I haven't found a way to attach test program to JIRA issue, so put it below :
public class MultiRowRangeFilterTest { byte[] key1Start = new byte[] {-3}; byte[] key1End = new byte[] {-2}; byte[] key2Start = new byte[] {5}; byte[] key2End = new byte[] {6}; byte[] badKey = new byte[] {-10}; @Test public void testRanges() throws IOException { MultiRowRangeFilter filter = new MultiRowRangeFilter(Arrays.asList( new MultiRowRangeFilter.RowRange(key1Start, true, key1End, false), new MultiRowRangeFilter.RowRange(key2Start, true, key2End, false) )); filter.filterRowKey(badKey, 0, 1); /* * FAILS -- includes BAD key! * Expected :SEEK_NEXT_USING_HINT * Actual :INCLUDE * */ assertEquals(Filter.ReturnCode.SEEK_NEXT_USING_HINT, filter.filterKeyValue(null)); } }
It seems to happen on 2.0.0-SNAPSHOT too, but I wasn't able to link one with included class.
I have played some time with algorithm, and found that quick fix may be applied to "getNextRangeIndex(byte[] rowKey)" method (hbase-client:1.1.0) :
if (insertionPosition == 0 && !rangeList.get(insertionPosition).contains(rowKey)) { return ROW_BEFORE_FIRST_RANGE; } // FIX START if(!this.initialized) { this.initialized = true; } // FIX END return insertionPosition;
Thanks, hope it will help.