private void cacheLoadedRows(TableReference tableRef, Iterable<RowResult<byte[]>> rowView) { for (RowResult<byte[]> loadedRow : rowView) { for (Map.Entry<Cell, byte[]> e : loadedRow.getCells()) { cacheLoadedCell(tableRef, e.getKey(), e.getValue()); } } }
private List<Entry<Cell, ByteBuffer>> filterWritesFromRows( Iterable<RowResult<byte[]>> rows, @Nullable Map<Cell, byte[]> writes) { List<Entry<Cell, ByteBuffer>> rowsWithoutWrites = Lists.newArrayList(); for (RowResult<byte[]> row : rows) { rowsWithoutWrites.addAll(filterWritesFromCells(row.getCells(), writes)); } return rowsWithoutWrites; }
private static Function<RowResult<byte[]>, Map<Cell, byte[]>> getIdentityTransform() { return input -> Maps2.fromEntries(input.getCells()); }
private static Function<RowResult<byte[]>, Map<Cell, byte[]>> getIdentityTransform() { return input -> Maps2.fromEntries(input.getCells()); }
@Override public RowResult<Value> next() { long begin = System.currentTimeMillis(); RowResult<Value> ret = super.next(); long end = System.currentTimeMillis(); s.totalGetMillis.addAndGet(end - begin); updateGetStats(s, MapEntries.toMap(ret.getCells())); return ret; } };
public static long getApproximateSizeOfRowResult(RowResult<byte[]> rr) { long size = rr.getRowName().length; for (Map.Entry<Cell, byte[]> entry : rr.getCells()) { size += Cells.getApproxSizeOfCell(entry.getKey()) + entry.getValue().length; } return size; } }
@Override public void deleteRange(TableReference tableRef, RangeRequest range) { try (ClosableIterator<RowResult<Set<Long>>> iterator = getRangeOfTimestamps(tableRef, range, AtlasDbConstants.MAX_TS)) { while (iterator.hasNext()) { RowResult<Set<Long>> rowResult = iterator.next(); Multimap<Cell, Long> cellsToDelete = HashMultimap.create(); rowResult.getCells().forEach(entry -> cellsToDelete.putAll(entry.getKey(), entry.getValue())); delete(tableRef, cellsToDelete); } } }
@Override public void deleteRange(TableReference tableRef, RangeRequest range) { try (ClosableIterator<RowResult<Set<Long>>> iterator = getRangeOfTimestamps(tableRef, range, AtlasDbConstants.MAX_TS)) { while (iterator.hasNext()) { RowResult<Set<Long>> rowResult = iterator.next(); Multimap<Cell, Long> cellsToDelete = HashMultimap.create(); for (Entry<Cell, Set<Long>> entry : rowResult.getCells()) { cellsToDelete.putAll(entry.getKey(), entry.getValue()); } delete(tableRef, cellsToDelete); } } }
private static PartialCopyStats copyInternal(final Transaction transaction, final TableReference srcTable, final TableReference dstTable, RangeRequest request, final MutableRange range) { final PartialCopyStats stats = new PartialCopyStats(); boolean isEmpty = transaction.getRange(srcTable, request).batchAccept(range.getBatchSize(), batch -> { Map<Cell, byte[]> entries = Maps.newHashMapWithExpectedSize(batch.size()); for (RowResult<byte[]> result : batch) { for (Entry<Cell, byte[]> entry : result.getCells()) { entries.put(entry.getKey(), entry.getValue()); } } if (batch.size() < range.getBatchSize()) { range.setStartRow(null); } else { byte[] lastRow = batch.get(batch.size() - 1).getRowName(); range.setStartRow(RangeRequests.nextLexicographicName(lastRow)); } transaction.put(dstTable, entries); stats.rowsCopied = batch.size(); stats.cellsCopied = entries.size(); return false; }); if (isEmpty) { range.setStartRow(null); } return stats; }
private void markRowsRead( TableReference table, Iterable<byte[]> rows, ColumnSelection cols, Iterable<RowResult<byte[]>> result) { if (!isSerializableTable(table)) { return; } ConcurrentNavigableMap<Cell, byte[]> reads = getReadsForTable(table); for (RowResult<byte[]> row : result) { Map<Cell, byte[]> map = Maps2.fromEntries(row.getCells()); reads.putAll(transformGetsForTesting(map)); } Set<RowRead> rowReads = rowsRead.computeIfAbsent(table, unused -> Sets.newConcurrentHashSet()); rowReads.add(new RowRead(rows, cols)); }
private void markRangeRead(TableReference table, RangeRequest range, List<RowResult<byte[]>> result) { if (!isSerializableTable(table)) { return; } ConcurrentNavigableMap<Cell, byte[]> reads = getReadsForTable(table); for (RowResult<byte[]> row : result) { Map<Cell, byte[]> map = Maps2.fromEntries(row.getCells()); map = transformGetsForTesting(map); reads.putAll(map); } setRangeEnd(table, range, Iterables.getLast(result).getRowName()); }
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)); }
Map<Cell, byte[]> currentCells = Maps2.fromEntries(currentRow.getCells()); if (writesByTable.get(table) != null) {
private List<Entry<Cell, ByteBuffer>> filterWritesFromRows( Iterable<RowResult<byte[]>> rows, @Nullable Map<Cell, byte[]> writes) { List<Entry<Cell, ByteBuffer>> rowsWithoutWrites = Lists.newArrayList(); for (RowResult<byte[]> row : rows) { rowsWithoutWrites.addAll(filterWritesFromCells(row.getCells(), writes)); } return rowsWithoutWrites; }
@Override public RowResult<Value> next() { long begin = System.currentTimeMillis(); RowResult<Value> ret = super.next(); long end = System.currentTimeMillis(); s.totalGetMillis.addAndGet(end - begin); updateGetStats(s, MapEntries.toMap(ret.getCells())); return ret; } };
public static long getApproximateSizeOfRowResult(RowResult<byte[]> rr) { long size = rr.getRowName().length; for (Map.Entry<Cell, byte[]> entry : rr.getCells()) { size += Cells.getApproxSizeOfCell(entry.getKey()) + entry.getValue().length; } return size; } }
@Override public void deleteRange(TableReference tableRef, RangeRequest range) { try (ClosableIterator<RowResult<Set<Long>>> iterator = getRangeOfTimestamps(tableRef, range, AtlasDbConstants.MAX_TS)) { while (iterator.hasNext()) { RowResult<Set<Long>> rowResult = iterator.next(); Multimap<Cell, Long> cellsToDelete = HashMultimap.create(); rowResult.getCells().forEach(entry -> cellsToDelete.putAll(entry.getKey(), entry.getValue())); delete(tableRef, cellsToDelete); } } }
private void markRangeRead(TableReference table, RangeRequest range, List<RowResult<byte[]>> result) { if (!isSerializableTable(table)) { return; } ConcurrentNavigableMap<Cell, byte[]> reads = getReadsForTable(table); for (RowResult<byte[]> row : result) { Map<Cell, byte[]> map = Maps2.fromEntries(row.getCells()); map = transformGetsForTesting(map); reads.putAll(map); } setRangeEnd(table, range, Iterables.getLast(result).getRowName()); }