Search in sources :

Example 6 with Value

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;
}
Also used : TokenBackedBasicResultsPage(com.palantir.util.paging.TokenBackedBasicResultsPage) RowResult(com.palantir.atlasdb.keyvalue.api.RowResult) RangeRequest(com.palantir.atlasdb.keyvalue.api.RangeRequest) SortedMap(java.util.SortedMap) Value(com.palantir.atlasdb.keyvalue.api.Value)

Example 7 with Value

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));
}
Also used : Value(com.palantir.atlasdb.keyvalue.api.Value) Cell(com.palantir.atlasdb.keyvalue.api.Cell) Test(org.junit.Test)

Example 8 with Value

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));
}
Also used : Value(com.palantir.atlasdb.keyvalue.api.Value) Test(org.junit.Test)

Example 9 with Value

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()));
}
Also used : Value(com.palantir.atlasdb.keyvalue.api.Value) Cell(com.palantir.atlasdb.keyvalue.api.Cell) Test(org.junit.Test)

Example 10 with Value

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()));
}
Also used : TokenBackedBasicResultsPage(com.palantir.util.paging.TokenBackedBasicResultsPage) RangeRequest(com.palantir.atlasdb.keyvalue.api.RangeRequest) Value(com.palantir.atlasdb.keyvalue.api.Value) Test(org.junit.Test)

Aggregations

Value (com.palantir.atlasdb.keyvalue.api.Value)74 Cell (com.palantir.atlasdb.keyvalue.api.Cell)55 RangeRequest (com.palantir.atlasdb.keyvalue.api.RangeRequest)20 RowResult (com.palantir.atlasdb.keyvalue.api.RowResult)18 Test (org.junit.Test)18 Entry (java.util.Map.Entry)16 TokenBackedBasicResultsPage (com.palantir.util.paging.TokenBackedBasicResultsPage)15 Map (java.util.Map)15 SortedMap (java.util.SortedMap)13 ImmutableMap (com.google.common.collect.ImmutableMap)12 TableReference (com.palantir.atlasdb.keyvalue.api.TableReference)10 LinkedHashMap (java.util.LinkedHashMap)9 ImmutableList (com.google.common.collect.ImmutableList)7 KeyAlreadyExistsException (com.palantir.atlasdb.keyvalue.api.KeyAlreadyExistsException)7 InsufficientConsistencyException (com.palantir.atlasdb.keyvalue.api.InsufficientConsistencyException)6 RowColumnRangeIterator (com.palantir.atlasdb.keyvalue.api.RowColumnRangeIterator)6 List (java.util.List)6 ImmutableSortedMap (com.google.common.collect.ImmutableSortedMap)5 BatchColumnRangeSelection (com.palantir.atlasdb.keyvalue.api.BatchColumnRangeSelection)5 LocalRowColumnRangeIterator (com.palantir.atlasdb.keyvalue.impl.LocalRowColumnRangeIterator)5