Search in sources :

Example 6 with CellScannerPosition

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);
    }
}
Also used : CellSearcher(org.apache.hadoop.hbase.codec.prefixtree.scanner.CellSearcher) KeyValue(org.apache.hadoop.hbase.KeyValue) CellScannerPosition(org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition) Cell(org.apache.hadoop.hbase.Cell) Test(org.junit.Test)

Example 7 with CellScannerPosition

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);
    }
}
Also used : CellSearcher(org.apache.hadoop.hbase.codec.prefixtree.scanner.CellSearcher) KeyValue(org.apache.hadoop.hbase.KeyValue) TestRowDataSearchWithPrefix(org.apache.hadoop.hbase.codec.prefixtree.row.data.TestRowDataSearchWithPrefix) CellScannerPosition(org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition) Test(org.junit.Test)

Example 8 with CellScannerPosition

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)));
}
Also used : KeyValue(org.apache.hadoop.hbase.KeyValue) CellScannerPosition(org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition) Cell(org.apache.hadoop.hbase.Cell)

Aggregations

KeyValue (org.apache.hadoop.hbase.KeyValue)8 CellScannerPosition (org.apache.hadoop.hbase.codec.prefixtree.scanner.CellScannerPosition)8 Cell (org.apache.hadoop.hbase.Cell)4 CellSearcher (org.apache.hadoop.hbase.codec.prefixtree.scanner.CellSearcher)2 Test (org.junit.Test)2 IOException (java.io.IOException)1 TestRowDataSearchWithPrefix (org.apache.hadoop.hbase.codec.prefixtree.row.data.TestRowDataSearchWithPrefix)1