@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges( TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { return delegate1.getFirstBatchForRanges(tableRef, rangeRequests, timestamp); }
@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges(TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { if (Iterables.isEmpty(rangeRequests)) { return ImmutableMap.of(); } return delegate.getFirstBatchForRanges(tableRef, rangeRequests, timestamp); }
@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges( TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { return getDelegate(tableRef).getFirstBatchForRanges(tableRef, rangeRequests, timestamp); }
@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges( TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { return delegate().getFirstBatchForRanges(tableRef, rangeRequests, timestamp); }
@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges( TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { try { return delegate().getFirstBatchForRanges( tableMapper.getMappedTableName(tableRef), rangeRequests, timestamp); } catch (TableMappingNotFoundException e) { throw new IllegalArgumentException(e); } }
@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges( TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { return maybeLog(() -> delegate.getFirstBatchForRanges(tableRef, rangeRequests, timestamp), logTimeAndTable("getFirstBatchForRanges", tableRef)); }
@Override public Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> getFirstBatchForRanges( TableReference tableRef, Iterable<RangeRequest> rangeRequests, long timestamp) { //noinspection unused - try-with-resources closes trace try (CloseableTrace trace = startLocalTrace("getFirstBatchForRanges({}, {} ranges, ts {})", LoggingArgs.safeTableOrPlaceholder(tableRef), Iterables.size(rangeRequests), timestamp)) { return delegate().getFirstBatchForRanges(tableRef, rangeRequests, timestamp); } }
@Test public void testRangePageBatchSizeOne() { RangeRequest rangeRequest = RangeRequest.builder().batchHint(1).build(); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Collections.singleton(rangeRequest), 1); assertEquals(1, ranges.keySet().size()); assertEquals(0, ranges.values().iterator().next().getResults().size()); assertEquals(false, ranges.values().iterator().next().moreResultsAvailable()); }
@Test public void testRangePagingBatches() { int totalPuts = 101; for (int i = 0 ; i < totalPuts ; i++) { putDirect("row"+i, "col1", "v1", 0); } Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Iterables.limit(Iterables.cycle(RangeRequest.builder().batchHint(1000).build()), 100), 1); assertEquals(1, ranges.keySet().size()); assertEquals(totalPuts, ranges.values().iterator().next().getResults().size()); }
@Test public void testRangePagingBatchSizeOne() { int totalPuts = 100; for (int i = 0 ; i < totalPuts ; i++) { putDirect("row"+i, "col1", "v1", 0); } RangeRequest rangeRequest = RangeRequest.builder().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("row0", PtBytes.toString(ranges.values().iterator().next().getResults().iterator().next().getRowName())); }
@Test public void testRangeAfterTimestamp() { putDirect("row1", "col2", "", 5); putDirect("row2", "col2", "", 0); RangeRequest rangeRequest = RangeRequest.builder().batchHint(1).build(); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Collections.singleton(rangeRequest), 1); assertEquals(1, ranges.keySet().size()); TokenBackedBasicResultsPage<RowResult<Value>, byte[]> page = ranges.values().iterator().next(); assertTrue(!page.getResults().isEmpty() || page.moreResultsAvailable()); }
@Test public void testRangeAfterTimestamp2() { putDirect("row1", "col2", "", 5); putDirect("row2", "col2", "", 0); putDirect("row3", "col2", "", 0); RangeRequest rangeRequest = RangeRequest.builder().batchHint(1).build(); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Collections.singleton(rangeRequest), 1); assertEquals(1, ranges.keySet().size()); TokenBackedBasicResultsPage<RowResult<Value>, byte[]> page = ranges.values().iterator().next(); assertTrue(page.moreResultsAvailable()); }
@Test public void getFirstBatchForRanges() throws Exception { Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> expectedResult = ImmutableMap.of(); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> result = kvs.getFirstBatchForRanges( TABLE_REF, RANGE_REQUESTS, TIMESTAMP); assertThat(result, equalTo(expectedResult)); checkSpan("atlasdb-kvs.getFirstBatchForRanges({table}, 1 ranges, ts 1)"); verify(delegate).getFirstBatchForRanges(TABLE_REF, RANGE_REQUESTS, TIMESTAMP); verifyNoMoreInteractions(delegate); }
@Test public void testRangePagingBatchesReverse() { if (!supportsReverse()) { return; } int totalPuts = 101; for (int i = 0 ; i < totalPuts ; i++) { putDirect("row"+i, "col1", "v1", 0); } Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Iterables.limit(Iterables.cycle(RangeRequest.reverseBuilder().batchHint(1000).build()), 100), 1); assertEquals(1, ranges.keySet().size()); assertEquals(totalPuts, ranges.values().iterator().next().getResults().size()); }
@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())); }
@Test public void testRangeAfterTimestampReverse() { if (!supportsReverse()) { return; } putDirect("row1", "col2", "", 0); putDirect("row2", "col2", "", 0); putDirect("row3", "col2", "", 5); RangeRequest rangeRequest = RangeRequest.reverseBuilder().batchHint(1).build(); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, Collections.singleton(rangeRequest), 1); assertEquals(1, ranges.keySet().size()); TokenBackedBasicResultsPage<RowResult<Value>, byte[]> page = ranges.values().iterator().next(); assertTrue(page.moreResultsAvailable()); }
@Test public void testKeyValueRanges2() { putDirect("row1", "col1", "", 0); putDirect("row2", "col1", "", 0); putDirect("row2", "col2", "", 0); final RangeRequest allRange = RangeRequest.builder().build(); final RangeRequest oneRange = RangeRequest.builder().startRowInclusive("row2".getBytes()).build(); final RangeRequest allRangeBatch = RangeRequest.builder().batchHint(3).build(); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, ImmutableList.of(allRange, oneRange, allRangeBatch), 1); assertTrue(ranges.get(allRange).getResults().size()>=1); assertEquals(2, ranges.get(allRangeBatch).getResults().size()); assertFalse(ranges.get(allRangeBatch).moreResultsAvailable()); assertEquals(1, ranges.get(oneRange).getResults().size()); }
private Object getMultiRangeInner(ConsecutiveNarrowTable table) { Iterable<RangeRequest> requests = table.getRangeRequests(1000, 1, false); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> results = table.getKvs().getFirstBatchForRanges(table.getTableRef(), requests, Long.MAX_VALUE); int numRequests = Iterables.size(requests); Preconditions.checkState(numRequests == results.size(), "Got %s requests and %s results, requests %s, results %s", numRequests, results.size(), requests, results); results.forEach((request, result) -> { Preconditions.checkState(1 == result.getResults().size(), "Key %s, List size is %s", Ints.fromByteArray(request.getStartInclusive()), result.getResults().size()); Preconditions.checkState(!result.moreResultsAvailable(), "Key %s, result.moreResultsAvailable() %s", Ints.fromByteArray(request.getStartInclusive()), (Object) result.moreResultsAvailable()); RowResult<Value> row = Iterables.getOnlyElement(result.getResults()); Preconditions.checkState(Arrays.equals(request.getStartInclusive(), row.getRowName()), "Request row is %s, result is %s", Ints.fromByteArray(request.getStartInclusive()), Ints.fromByteArray(row.getRowName())); }); return results; }
@Test public void testKeyValueRanges() { putDirect("row1", "col1", "", 0); putDirect("row2", "col1", "", 0); putDirect("row2", "col2", "", 0); Map<RangeRequest, TokenBackedBasicResultsPage<RowResult<Value>, byte[]>> ranges = keyValueService.getFirstBatchForRanges(TEST_TABLE, ImmutableList.of(RangeRequest.builder().build(), RangeRequest.builder().build()), 1); assertTrue(ranges.size() >= 1); }
@Test public void checkpointTableOnSourceKvsIsIgnored() { fromKvs.createTables(TEST_AND_CHECKPOINT_TABLES); KeyValueServiceMigrator migrator = KeyValueServiceMigrators.setupMigrator(migratorSpec); migrator.setup(); migrator.migrate(); verify(fromKvs, never()).get(eq(CHECKPOINT_TABLE), any()); verify(fromKvs, never()).getRange(eq(CHECKPOINT_TABLE), any(), anyLong()); verify(fromKvs, never()).getRows(eq(CHECKPOINT_TABLE), any(), any(), anyLong()); verify(fromKvs, never()).getRowsColumnRange(eq(CHECKPOINT_TABLE), any(), any(), anyLong()); verify(fromKvs, never()).getRowsColumnRange(eq(CHECKPOINT_TABLE), any(), any(), anyInt(), anyLong()); verify(fromKvs, never()).getFirstBatchForRanges(eq(CHECKPOINT_TABLE), any(), anyLong()); }