use of com.palantir.atlasdb.keyvalue.api.RowColumnRangeIterator in project atlasdb by palantir.
the class SnapshotTransaction method getRowsColumnRange.
@Override
public Iterator<Map.Entry<Cell, byte[]>> getRowsColumnRange(TableReference tableRef, Iterable<byte[]> rows, ColumnRangeSelection columnRangeSelection, int batchHint) {
checkGetPreconditions(tableRef);
if (Iterables.isEmpty(rows)) {
return Collections.emptyIterator();
}
hasReads = true;
RowColumnRangeIterator rawResults = keyValueService.getRowsColumnRange(tableRef, rows, columnRangeSelection, batchHint, getStartTimestamp());
if (!rawResults.hasNext()) {
validateExternalAndCommitLocksIfNecessary(tableRef, getStartTimestamp());
}
// else the postFiltered iterator will check for each batch.
Iterator<Map.Entry<byte[], RowColumnRangeIterator>> rawResultsByRow = partitionByRow(rawResults);
Iterator<Iterator<Map.Entry<Cell, byte[]>>> postFiltered = Iterators.transform(rawResultsByRow, e -> {
byte[] row = e.getKey();
RowColumnRangeIterator rawIterator = e.getValue();
BatchColumnRangeSelection batchColumnRangeSelection = BatchColumnRangeSelection.create(columnRangeSelection, batchHint);
return getPostFilteredColumns(tableRef, batchColumnRangeSelection, row, rawIterator);
});
return Iterators.concat(postFiltered);
}
use of com.palantir.atlasdb.keyvalue.api.RowColumnRangeIterator in project atlasdb by palantir.
the class ColumnRangeBatchProvider method getBatch.
@Override
public ClosableIterator<Map.Entry<Cell, Value>> getBatch(int batchSize, @Nullable byte[] lastToken) {
byte[] startCol = columnRangeSelection.getStartCol();
if (lastToken != null) {
startCol = RangeRequests.nextLexicographicName(lastToken);
}
BatchColumnRangeSelection newRange = BatchColumnRangeSelection.create(startCol, columnRangeSelection.getEndCol(), batchSize);
Map<byte[], RowColumnRangeIterator> range = keyValueService.getRowsColumnRange(tableRef, ImmutableList.of(row), newRange, timestamp);
if (range.isEmpty()) {
return ClosableIterators.wrap(ImmutableList.<Map.Entry<Cell, Value>>of().iterator());
}
return ClosableIterators.wrap(Iterables.getOnlyElement(range.values()));
}
use of com.palantir.atlasdb.keyvalue.api.RowColumnRangeIterator in project atlasdb by palantir.
the class KvsGetRowsColumnRangeBenchmarks method getAllColumnsAligned.
@Benchmark
@Threads(1)
@Warmup(time = 16, timeUnit = TimeUnit.SECONDS)
@Measurement(time = 160, timeUnit = TimeUnit.SECONDS)
public Object getAllColumnsAligned(WideRowsTable table) {
List<byte[]> rows = IntStream.rangeClosed(0, WideRowsTable.NUM_ROWS - 1).mapToObj(WideRowsTable::getRow).collect(Collectors.toList());
RowColumnRangeIterator rowsColumnRange = table.getKvs().getRowsColumnRange(table.getTableRef(), rows, new ColumnRangeSelection(null, null), 10000, Long.MAX_VALUE);
int expectedNumCells = WideRowsTable.NUM_ROWS * WideRowsTable.NUM_COLS_PER_ROW;
List<Map.Entry<Cell, Value>> loadedCells = new ArrayList<>(expectedNumCells);
while (rowsColumnRange.hasNext()) {
loadedCells.add(rowsColumnRange.next());
}
Preconditions.checkState(loadedCells.size() == expectedNumCells, "Should be %s cells, but were: %s", expectedNumCells, loadedCells.size());
return loadedCells;
}
use of com.palantir.atlasdb.keyvalue.api.RowColumnRangeIterator in project atlasdb by palantir.
the class KvsGetRowsColumnRangeBenchmarks method getAllColumnsSingleBigRow.
@Benchmark
@Threads(1)
@Warmup(time = 16, timeUnit = TimeUnit.SECONDS)
@Measurement(time = 160, timeUnit = TimeUnit.SECONDS)
public Object getAllColumnsSingleBigRow(VeryWideRowTable table, Blackhole blackhole) {
RowColumnRangeIterator iter = table.getKvs().getRowsColumnRange(table.getTableRef(), Collections.singleton(Tables.ROW_BYTES.array()), new ColumnRangeSelection(null, null), 10000, Long.MAX_VALUE);
int count = 0;
while (iter.hasNext()) {
blackhole.consume(iter.next());
++count;
}
Preconditions.checkState(count == table.getNumCols(), "Should be %s cells, but were: %s", table.getNumCols(), count);
return count;
}
use of com.palantir.atlasdb.keyvalue.api.RowColumnRangeIterator in project atlasdb by palantir.
the class AbstractKeyValueServiceTest method testGetRowColumnRangeCellBatchMultipleRows.
@Test
public void testGetRowColumnRangeCellBatchMultipleRows() {
putTestDataForSingleTimestamp();
RowColumnRangeIterator values = keyValueService.getRowsColumnRange(TEST_TABLE, ImmutableList.of(row1, row0, row2), new ColumnRangeSelection(PtBytes.EMPTY_BYTE_ARRAY, PtBytes.EMPTY_BYTE_ARRAY), 3, TEST_TIMESTAMP + 1);
assertNextElementMatches(values, Cell.create(row1, column0), value10);
assertNextElementMatches(values, Cell.create(row1, column2), value12);
assertNextElementMatches(values, TEST_CELL, value00);
assertNextElementMatches(values, Cell.create(row0, column1), value01);
assertNextElementMatches(values, Cell.create(row2, column1), value21);
assertNextElementMatches(values, Cell.create(row2, column2), value22);
assertFalse(values.hasNext());
}
Aggregations