use of com.palantir.atlasdb.keyvalue.api.Value in project atlasdb by palantir.
the class DbKvsGetRanges method breakUpByBatch.
/**
* This tablehod expects the input to be sorted by rowname ASC for both rowsForBatches and
* cellsByRow.
*/
private Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> breakUpByBatch(List<RangeRequest> requests, SortedSetMultimap<Integer, byte[]> rowsForBatches, NavigableMap<byte[], SortedMap<byte[], Value>> cellsByRow) {
Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ret = Maps.newHashMap();
for (int i = 0; i < requests.size(); i++) {
RangeRequest request = requests.get(i);
if (ret.containsKey(request)) {
continue;
}
SortedSet<byte[]> rowNames = rowsForBatches.get(i);
SortedMap<byte[], SortedMap<byte[], Value>> cellsForBatch = Maps.filterKeys(request.isReverse() ? cellsByRow.descendingMap() : cellsByRow, Predicates.in(rowNames));
validateRowNames(cellsForBatch.keySet(), request.getStartInclusive(), request.getEndExclusive(), request.isReverse());
IterableView<RowResult<Value>> rows = RowResults.viewOfMap(cellsForBatch);
if (!request.getColumnNames().isEmpty()) {
rows = filterColumnSelection(rows, request);
}
if (rowNames.isEmpty()) {
assert rows.isEmpty();
ret.put(request, SimpleTokenBackedResultsPage.create(request.getEndExclusive(), rows, false));
} else {
byte[] last = rowNames.last();
if (request.isReverse()) {
last = rowNames.first();
}
if (RangeRequests.isTerminalRow(request.isReverse(), last)) {
ret.put(request, SimpleTokenBackedResultsPage.create(last, rows, false));
} else {
// If rowNames isn't a whole batch we know we don't have any more results.
boolean hasMore = request.getBatchHint() == null || request.getBatchHint() <= rowNames.size();
byte[] nextStartRow = RangeRequests.getNextStartRow(request.isReverse(), last);
ret.put(request, SimpleTokenBackedResultsPage.create(nextStartRow, rows, hasMore));
}
}
}
return ret;
}
use of com.palantir.atlasdb.keyvalue.api.Value in project atlasdb by palantir.
the class AbstractKeyValueServiceTest method testGetWhenMultipleVersions.
@Test
public void testGetWhenMultipleVersions() {
putTestDataForMultipleTimestamps();
Value val0 = Value.create(value0_t0, TEST_TIMESTAMP);
Value val1 = Value.create(value0_t1, TEST_TIMESTAMP + 1);
assertTrue(keyValueService.get(TEST_TABLE, ImmutableMap.of(TEST_CELL, TEST_TIMESTAMP)).isEmpty());
Map<Cell, Value> result = keyValueService.get(TEST_TABLE, ImmutableMap.of(TEST_CELL, TEST_TIMESTAMP + 1));
assertTrue(result.containsKey(TEST_CELL));
assertEquals(1, result.size());
assertTrue(result.containsValue(val0));
result = keyValueService.get(TEST_TABLE, ImmutableMap.of(TEST_CELL, TEST_TIMESTAMP + 2));
assertEquals(1, result.size());
assertTrue(result.containsKey(TEST_CELL));
assertTrue(result.containsValue(val1));
result = keyValueService.get(TEST_TABLE, ImmutableMap.of(TEST_CELL, TEST_TIMESTAMP + 3));
assertEquals(1, result.size());
assertTrue(result.containsKey(TEST_CELL));
assertTrue(result.containsValue(val1));
}
use of com.palantir.atlasdb.keyvalue.api.Value in project atlasdb by palantir.
the class AbstractKeyValueServiceTest method testPutWithTimestamps.
@Test
public void testPutWithTimestamps() {
putTestDataForMultipleTimestamps();
final Value val1 = Value.create(value0_t1, TEST_TIMESTAMP + 1);
final Value val5 = Value.create(value0_t5, TEST_TIMESTAMP + 5);
keyValueService.putWithTimestamps(TEST_TABLE, ImmutableMultimap.of(TEST_CELL, val5));
assertEquals(val5, keyValueService.get(TEST_TABLE, ImmutableMap.of(TEST_CELL, TEST_TIMESTAMP + 6)).get(TEST_CELL));
assertEquals(val1, keyValueService.get(TEST_TABLE, ImmutableMap.of(TEST_CELL, TEST_TIMESTAMP + 5)).get(TEST_CELL));
keyValueService.delete(TEST_TABLE, ImmutableMultimap.of(TEST_CELL, TEST_TIMESTAMP + 5));
}
use of com.palantir.atlasdb.keyvalue.api.Value in project atlasdb by palantir.
the class AbstractTransactionTest method testGetAtDifferentVersions.
@Test
public void testGetAtDifferentVersions() {
putDirect("row1", "col1", "v1", 1);
putDirect("row1", "col1", "v2", 5);
putDirect("row2", "col1", "v3", 3);
putDirect("row2", "col1", "v4", 8);
Cell cell1 = Cell.create("row1".getBytes(), "col1".getBytes());
Cell cell2 = Cell.create("row2".getBytes(), "col1".getBytes());
Map<Cell, Value> results = keyValueService.get(TEST_TABLE, ImmutableMap.of(cell1, 5L, cell2, 8L));
Value v = results.get(cell1);
assertEquals(1L, v.getTimestamp());
assertEquals("v1", new String(v.getContents()));
v = results.get(cell2);
assertEquals(3L, v.getTimestamp());
assertEquals("v3", new String(v.getContents()));
}
use of com.palantir.atlasdb.keyvalue.api.Value in project atlasdb by palantir.
the class AbstractTransactionTest method testRangePagingBatchSizeOneReverse.
@Test
public void testRangePagingBatchSizeOneReverse() {
if (!supportsReverse()) {
return;
}
int totalPuts = 100;
for (int i = 0; i < totalPuts; i++) {
putDirect("row" + i, "col1", "v1", 0);
}
RangeRequest rangeRequest = RangeRequest.reverseBuilder().batchHint(1).build();
Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Iterables.limit(Iterables.cycle(rangeRequest), 100), 1);
assertEquals(1, ranges.keySet().size());
assertEquals(1, ranges.values().iterator().next().getResults().size());
assertEquals("row99", PtBytes.toString(ranges.values().iterator().next().getResults().iterator().next().getRowName()));
}
Aggregations