use of org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition in project hbase by apache.
the class TestPrefixTreeSearcher method testRandomSeekMisses.
@Test
public void testRandomSeekMisses() throws IOException {
CellSearcher searcher = null;
List<Integer> rowStartIndexes = rows.getRowStartIndexes();
try {
searcher = DecoderFactory.checkOut(block, true);
//test both the positionAtOrBefore and positionAtOrAfter methods
for (boolean beforeVsAfterOnMiss : new boolean[] { true, false }) {
for (int i = 0; i < rows.getInputs().size(); ++i) {
KeyValue kv = rows.getInputs().get(i);
//nextRow
Cell inputNextRow = CellUtil.createFirstOnNextRow(kv);
CellScannerPosition position = beforeVsAfterOnMiss ? searcher.positionAtOrBefore(inputNextRow) : searcher.positionAtOrAfter(inputNextRow);
boolean isFirstInRow = rowStartIndexes.contains(i);
if (isFirstInRow) {
int rowIndex = rowStartIndexes.indexOf(i);
if (rowIndex < rowStartIndexes.size() - 1) {
if (beforeVsAfterOnMiss) {
Assert.assertEquals(CellScannerPosition.BEFORE, position);
} else {
Assert.assertEquals(CellScannerPosition.AFTER, position);
}
int expectedInputIndex = beforeVsAfterOnMiss ? rowStartIndexes.get(rowIndex + 1) - 1 : rowStartIndexes.get(rowIndex + 1);
Assert.assertEquals(rows.getInputs().get(expectedInputIndex), searcher.current());
}
}
//previous KV
KeyValue inputPreviousKv = KeyValueUtil.previousKey(kv);
boolean hit = searcher.positionAt(inputPreviousKv);
Assert.assertFalse(hit);
position = searcher.positionAtOrAfter(inputPreviousKv);
if (CollectionUtils.isLastIndex(rows.getInputs(), i)) {
Assert.assertTrue(CellScannerPosition.AFTER_LAST == position);
} else {
Assert.assertTrue(CellScannerPosition.AFTER == position);
/*
* TODO: why i+1 instead of i?
*/
Assert.assertEquals(rows.getInputs().get(i + 1), searcher.current());
}
}
}
} finally {
DecoderFactory.checkIn(searcher);
}
}
use of org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition in project hbase by apache.
the class TestPrefixTreeSearcher method testSeekWithPrefix.
@Test
public void testSeekWithPrefix() throws IOException {
if (!(rows instanceof TestRowDataSearchWithPrefix)) {
return;
}
CellSearcher searcher = null;
try {
searcher = DecoderFactory.checkOut(block, true);
// seek with half bytes of second row key, should return second row
KeyValue kv = rows.getInputs().get(1);
KeyValue firstKVOnRow = KeyValueUtil.createFirstOnRow(Arrays.copyOfRange(kv.getRowArray(), kv.getRowOffset(), kv.getRowOffset() + kv.getRowLength() / 2));
CellScannerPosition position = searcher.positionAtOrAfter(firstKVOnRow);
Assert.assertEquals(CellScannerPosition.AFTER, position);
Assert.assertEquals(kv, searcher.current());
} finally {
DecoderFactory.checkIn(searcher);
}
}
use of org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition in project hbase by apache.
the class TestRowDataSearcherRowMiss method testBetween1and2.
private void testBetween1and2(CellSearcher searcher) {
//reuse
CellScannerPosition p;
Cell betweenAAndAAA = new KeyValue(AA, cf, cq, ts - 2, v);
//test exact
Assert.assertFalse(searcher.positionAt(betweenAAndAAA));
//test atOrBefore
p = searcher.positionAtOrBefore(betweenAAndAAA);
Assert.assertEquals(CellScannerPosition.BEFORE, p);
Assert.assertTrue(CellUtil.equals(searcher.current(), d.get(1)));
//test atOrAfter
p = searcher.positionAtOrAfter(betweenAAndAAA);
Assert.assertEquals(CellScannerPosition.AFTER, p);
Assert.assertTrue(CellUtil.equals(searcher.current(), d.get(2)));
}
Aggregations