@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 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 testRangePaging() { int totalPuts = 101; for (int i = 0 ; i < totalPuts ; i++) { putDirect("row"+i, "col1", "v1", 0); } ClosableIterator<RowResult<Value>> range = keyValueService.getRange(TEST_TABLE, RangeRequest.builder().batchHint(1000).build(), 1); try { int reads = Iterators.size(range); assertEquals(totalPuts, reads); } finally { range.close(); } }
@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()); }
@Override protected List<byte[]> getRange(Transaction txn, long startInclusive, long endExclusive) { KvRowsTable table = BenchmarksTableFactory.of().getKvRowsTable(txn); return table.getRange( RangeRequest.builder() .startRowInclusive(KvRowsRow.of(bucket, startInclusive)) .endRowExclusive(KvRowsRow.of(bucket, endExclusive)) .batchHint(batchSize) .build()) .hintBatchSize(batchSize) .transform(KvRowsRowResult::getData) .immutableCopy(); }
public static Long get(KeyValueService kvs, Long timeMillis) { byte[] row = EncodingUtils.encodeUnsignedVarLong(timeMillis); EncodingUtils.flipAllBitsInPlace(row); RangeRequest rangeRequest = RangeRequest.builder().startRowInclusive(row).batchHint(1).build(); try (ClosableIterator<RowResult<Value>> result = kvs.getRange(AtlasDbConstants.PUNCH_TABLE, rangeRequest, Long.MAX_VALUE)) { if (result.hasNext()) { return EncodingUtils.decodeUnsignedVarLong(result.next().getColumns().get(COLUMN).getContents()); } else { return Long.MIN_VALUE; } } }
private List<SweepPriority> loadPriorities(Transaction tx) { SweepPriorityTable table = sweepTableFactory.getSweepPriorityTable(tx); // Load a single column first for each row. This is a much more efficient query on Cassandra // than the full table scan that occurs otherwise. List<SweepPriorityRowResult> rows = table.getRange(RangeRequest.builder() .retainColumns(SweepPriorityTable.getColumnSelection(SweepPriorityNamedColumn.CELLS_DELETED)) .batchHint(READ_BATCH_SIZE) .build()) .immutableCopy(); // Fetch all columns for the above rows directly return Lists.transform(table.getRows(Lists.transform(rows, SweepPriorityRowResult::getRowName)), SweepPriorityStoreImpl::hydrate); }
@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 testKeyValueRangeReverse() { if (!supportsReverse()) { return; } putDirect("row1", "col1", "", 0); putDirect("row2", "col1", "", 0); putDirect("row2", "col2", "", 0); RangeRequest allRange = RangeRequest.reverseBuilder().batchHint(3).build(); ClosableIterator<RowResult<Value>> range = keyValueService.getRange(TEST_TABLE, allRange, 1); ImmutableList<RowResult<Value>> list = ImmutableList.copyOf(range); assertEquals(2, list.size()); assertEquals("row2", PtBytes.toString(list.iterator().next().getRowName())); }
@Test public void testRangesTransaction() { Transaction t = startTransaction(); put(t, "row1", "col1", "v1"); t.commit(); RangeRequest allRange = RangeRequest.builder().batchHint(3).build(); t = startTransaction(); verifyAllGetRangesImplsRangeSizes(t, allRange, 1); }
@Test public void testRangeBatchSizeOne() { RangeRequest range = RangeRequest.builder().batchHint(1).build(); ClosableIterator<RowResult<Value>> ranges = keyValueService.getRange(TEST_TABLE, range, 1); assertEquals(false, ranges.hasNext()); }
@Test public void testKeyValueRangesMany3() { putDirect("row1", "col1", "", 0); putDirect("row2", "col1", "", 0); putDirect("row2", "col2", "", 0); RangeRequest allRange = RangeRequest.builder().prefixRange("row1".getBytes()).batchHint(3).build(); for (int i = 0 ; i < 1000 ; i++) { ClosableIterator<RowResult<Value>> range = keyValueService.getRange(TEST_TABLE, allRange, 1); ImmutableList<RowResult<Value>> list = ImmutableList.copyOf(range); assertEquals(1, list.size()); } }
@Test public void testKeyValueRangesMany2() { putDirect("row1", "col1", "", 0); putDirect("row2", "col1", "", 0); putDirect("row2", "col2", "", 0); RangeRequest allRange = RangeRequest.builder().batchHint(3).build(); for (int i = 0 ; i < 1000 ; i++) { ClosableIterator<RowResult<Value>> range = keyValueService.getRange(TEST_TABLE, allRange, 1); ImmutableList<RowResult<Value>> list = ImmutableList.copyOf(range); assertEquals(2, list.size()); } }
@Override public ClosableIterator<RowResult<Value>> getBatch(int batchSize, @Nullable byte[] lastToken) { RangeRequest.Builder newRange = range.getBuilder(); if (lastToken != null) { newRange.startRowInclusive(RangeRequests.getNextStartRow(range.isReverse(), lastToken)); } newRange.batchHint(batchSize); return keyValueService.getRange(tableRef, newRange.build(), timestamp); }
private void validateTable(TableReference table, int limit, Transaction t1, Transaction t2) { RangeRequest.Builder builder = RangeRequest.builder().batchHint(limit); byte[] nextRowName = new byte[0]; while (nextRowName != null) { RangeRequest range = builder.startRowInclusive(nextRowName).build(); nextRowName = validateAndGetNextRowName(table, limit, t1, t2, range); } }
@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()); }
private RangeRequest getRangeRequest(boolean reverse, byte[] firstRow, int rowBatchSize) { return RangeRequest.builder(reverse) .startRowInclusive(firstRow) .batchHint(rowBatchSize) .build(); }
@JsonIgnore public Builder getBuilder() { return new Builder(reverse) .endRowExclusive(endExclusive) .startRowInclusive(startInclusive) .batchHint(batchHint) .retainColumns(columns); }
@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()); }