public void close() { if (currentResults != null) { currentResults.close(); currentResults = null; lastToken = null; } }
@Override public void close() { delegate().close(); }
private Object getSingleRangeInner(ConsecutiveNarrowTable table, int sliceSize) { RangeRequest request = Iterables.getOnlyElement(table.getRangeRequests(1, sliceSize, false)); int startRow = Ints.fromByteArray(request.getStartInclusive()); ClosableIterator<RowResult<Value>> result = table.getKvs().getRange(table.getTableRef(), request, Long.MAX_VALUE); ArrayList<RowResult<Value>> list = Lists.newArrayList(result); result.close(); Preconditions.checkState(list.size() == sliceSize, "List size %s != %s", sliceSize, list.size()); list.forEach(rowResult -> { byte[] rowName = rowResult.getRowName(); int rowNumber = Ints.fromByteArray(rowName); Preconditions.checkState(rowNumber - startRow < sliceSize, "Start Row %s, row number %s, sliceSize %s", startRow, rowNumber, sliceSize); }); return result; }
@Override protected <K extends Exception> void batchAcceptSizeHint( int batchSizeHint, ConsistentVisitor<SortedMap<Long, Multimap<TableReference, Cell>>, K> visitor) throws K { ClosableIterator<RowResult<Value>> iterator = getIteratorToScrub(batchSizeHint, maxScrubTimestamp, startRow, endRow); try { BatchingVisitableFromIterable.create(iterator).batchAccept( batchSizeHint, batch -> visitor.visitOne(transformRows(batch))); } finally { iterator.close(); } } };
private void updateResultsIfNeeded() { if (currentResults == null) { currentResults = batchProvider.getBatch(originalBatchSize, null); lastBatchSize = originalBatchSize; return; } // We have current results and have not read them. if (lastToken == null) { return; } // If the last row we got was the maximal row, then we are done. if (!batchProvider.hasNext(lastToken)) { currentResults = ClosableIterators.wrap(ImmutableList.<T>of().iterator()); return; } int bestBatchSize = getBestBatchSize(); // Only close and throw away our old iterator if the batch size has changed by a factor of 2 or more. if (bestBatchSize >= lastBatchSize * 2 || bestBatchSize <= lastBatchSize / 2) { currentResults.close(); currentResults = batchProvider.getBatch(bestBatchSize, lastToken); lastBatchSize = bestBatchSize; } }
private void testGetRangeWithTimestamps(boolean reverse) { putTestDataForMultipleTimestamps(); final RangeRequest range; if (!reverse) { range = RangeRequest.builder().startRowInclusive(row(0)).endRowExclusive(row(1)).build(); } else { range = RangeRequest.reverseBuilder().startRowInclusive(row(0)).build(); } ClosableIterator<RowResult<Set<Long>>> rangeWithHistory = keyValueService.getRangeOfTimestamps( TEST_TABLE, range, TEST_TIMESTAMP + 2); RowResult<Set<Long>> row = rangeWithHistory.next(); assertFalse(rangeWithHistory.hasNext()); rangeWithHistory.close(); assertEquals(1, Iterables.size(row.getCells())); Entry<Cell, Set<Long>> cell0 = row.getCells().iterator().next(); assertEquals(2, cell0.getValue().size()); assertTrue(cell0.getValue().contains(TEST_TIMESTAMP)); assertTrue(cell0.getValue().contains(TEST_TIMESTAMP + 1)); }
range.close();
@Override protected BiMap<TableReference, TableReference> readTableMap() { BiMap<TableReference, TableReference> ret = HashBiMap.create(); ClosableIterator<RowResult<Value>> range = kv.getRange( AtlasDbConstants.NAMESPACE_TABLE, RangeRequest.builder().build(), Long.MAX_VALUE); try { while (range.hasNext()) { RowResult<Value> row = range.next(); String shortName = PtBytes.toString(row.getColumns() .get(AtlasDbConstants.NAMESPACE_SHORT_COLUMN_BYTES).getContents()); TableReference ref = getTableRefFromBytes(row.getRowName()); ret.put(ref, TableReference.createWithEmptyNamespace(shortName)); } } finally { range.close(); } return ret; }
private <K extends Exception> boolean getBatchingVisitableFromIterator( TableReference tableRef, RangeRequest range, int userRequestedSize, AbortingVisitor<List<RowResult<byte[]>>, K> visitor, int preFilterBatchSize) throws K { ClosableIterator<RowResult<byte[]>> postFilterIterator = postFilterIterator(tableRef, range, preFilterBatchSize, Value.GET_VALUE); try { Iterator<RowResult<byte[]>> localWritesInRange = Cells.createRowView( getLocalWritesForRange(tableRef, range.getStartInclusive(), range.getEndExclusive()).entrySet()); Iterator<RowResult<byte[]>> mergeIterators = mergeInLocalWritesRows(postFilterIterator, localWritesInRange, range.isReverse()); return BatchingVisitableFromIterable.create(mergeIterators).batchAccept(userRequestedSize, visitor); } finally { postFilterIterator.close(); } }
@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(); } }
public void close() { if (currentResults != null) { currentResults.close(); currentResults = null; lastToken = null; } }
@Override public void close() { delegate().close(); }
@Override protected <K extends Exception> void batchAcceptSizeHint( int batchSizeHint, ConsistentVisitor<SortedMap<Long, Multimap<TableReference, Cell>>, K> visitor) throws K { ClosableIterator<RowResult<Value>> iterator = getIteratorToScrub(batchSizeHint, maxScrubTimestamp, startRow, endRow); try { BatchingVisitableFromIterable.create(iterator).batchAccept( batchSizeHint, batch -> visitor.visitOne(transformRows(batch))); } finally { iterator.close(); } } };
private void updateResultsIfNeeded() { if (currentResults == null) { currentResults = batchProvider.getBatch(originalBatchSize, null); lastBatchSize = originalBatchSize; return; } // We have current results and have not read them. if (lastToken == null) { return; } // If the last row we got was the maximal row, then we are done. if (!batchProvider.hasNext(lastToken)) { currentResults = ClosableIterators.wrap(ImmutableList.<T>of().iterator()); return; } int bestBatchSize = getBestBatchSize(); // Only close and throw away our old iterator if the batch size has changed by a factor of 2 or more. if (bestBatchSize >= lastBatchSize * 2 || bestBatchSize <= lastBatchSize / 2) { currentResults.close(); currentResults = batchProvider.getBatch(bestBatchSize, lastToken); lastBatchSize = bestBatchSize; } }
private void testGetRangeWithTimestamps(boolean reverse) { putTestDataForMultipleTimestamps(); final RangeRequest range; if (!reverse) { range = RangeRequest.builder().startRowInclusive(row(0)).endRowExclusive(row(1)).build(); } else { range = RangeRequest.reverseBuilder().startRowInclusive(row(0)).build(); } ClosableIterator<RowResult<Set<Long>>> rangeWithHistory = keyValueService.getRangeOfTimestamps( TEST_TABLE, range, TEST_TIMESTAMP + 2); RowResult<Set<Long>> row = rangeWithHistory.next(); assertFalse(rangeWithHistory.hasNext()); rangeWithHistory.close(); assertEquals(1, Iterables.size(row.getCells())); Entry<Cell, Set<Long>> cell0 = row.getCells().iterator().next(); assertEquals(2, cell0.getValue().size()); assertTrue(cell0.getValue().contains(TEST_TIMESTAMP)); assertTrue(cell0.getValue().contains(TEST_TIMESTAMP + 1)); }
@Override protected BiMap<TableReference, TableReference> readTableMap() { BiMap<TableReference, TableReference> ret = HashBiMap.create(); ClosableIterator<RowResult<Value>> range = kv.getRange( AtlasDbConstants.NAMESPACE_TABLE, RangeRequest.builder().build(), Long.MAX_VALUE); try { while (range.hasNext()) { RowResult<Value> row = range.next(); String shortName = PtBytes.toString(row.getColumns() .get(AtlasDbConstants.NAMESPACE_SHORT_COLUMN_BYTES).getContents()); TableReference ref = getTableRefFromBytes(row.getRowName()); ret.put(ref, TableReference.createWithEmptyNamespace(shortName)); } } finally { range.close(); } return ret; }
private <K extends Exception> boolean getBatchingVisitableFromIterator( TableReference tableRef, RangeRequest range, int userRequestedSize, AbortingVisitor<List<RowResult<byte[]>>, K> visitor, int preFilterBatchSize) throws K { ClosableIterator<RowResult<byte[]>> postFilterIterator = postFilterIterator(tableRef, range, preFilterBatchSize, Value.GET_VALUE); try { Iterator<RowResult<byte[]>> localWritesInRange = Cells.createRowView( getLocalWritesForRange(tableRef, range.getStartInclusive(), range.getEndExclusive()).entrySet()); Iterator<RowResult<byte[]>> mergeIterators = mergeInLocalWritesRows(postFilterIterator, localWritesInRange, range.isReverse()); return BatchingVisitableFromIterable.create(mergeIterators).batchAccept(userRequestedSize, visitor); } finally { postFilterIterator.close(); } }
@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(); } }
Value.create(val(2, 2), TEST_TIMESTAMP)).build()), rangeResult.next()); rangeResult.close();