void deleteDedicatedRows(DedicatedRows dedicatedRows) { dedicatedRows.getDedicatedRows().stream() .map(SweepableCellsRow::persistToBytes) .map(dedicatedRow -> computeRangeRequestForRows(dedicatedRow, dedicatedRow)) .forEach(this::deleteRange); }
SweepBatch getNextBatchToSweep(ShardAndStrategy shardStrategy, long lastSweptTs, long sweepTs) { return sweepableTimestamps.nextSweepableTimestampPartition(shardStrategy, lastSweptTs, sweepTs) .map(fine -> sweepableCells.getBatchForPartition(shardStrategy, fine, lastSweptTs, sweepTs)) .orElse(SweepBatch.of(ImmutableList.of(), DedicatedRows.of(ImmutableList.of()), sweepTs - 1L)); } }
@Test public void cleanupMultipleDedicatedRows() { useSingleShard(); long timestamp = TS + 1; DedicatedRows dedicatedRows = DedicatedRows.of(LongStream.range(0, 3) .mapToObj(rowNumber -> ImmutableTargetedSweepMetadata.builder() .conservative(true) .dedicatedRow(true) .dedicatedRowNumber(rowNumber) .shard(0) .build() .persistToBytes()) .map(metadata -> SweepableCellsRow.of(timestamp, metadata)) .collect(Collectors.toList())); writeCommittedConservativeRowForTimestamp(timestamp, MAX_CELLS_DEDICATED * 2 + 1); sweepableCells.deleteDedicatedRows(dedicatedRows); verifyRowsDeletedFromSweepQueue(dedicatedRows.getDedicatedRows()); }
private DedicatedRows getDedicatedRowsToClear(List<SweepableCellsRow> rows, TimestampsToSweep tsToSweep) { return DedicatedRows.of(rows.stream() .filter(row -> { TargetedSweepMetadata metadata = TargetedSweepMetadata.BYTES_HYDRATOR.hydrateFromBytes(row.getMetadata()); checkState(metadata.dedicatedRow(), "Row not a dedicated row", SafeArg.of("row", row)); return tsToSweep.timestampsDescending().contains(row.getTimestampPartition()); }).collect(Collectors.toList())); }
void deleteDedicatedRows(DedicatedRows dedicatedRows) { dedicatedRows.getDedicatedRows().stream() .map(SweepableCellsRow::persistToBytes) .map(dedicatedRow -> computeRangeRequestForRows(dedicatedRow, dedicatedRow)) .forEach(this::deleteRange); }
@Test public void getBatchReturnsDedicatedRowsSeen() { useSingleShard(); long timestamp = TS + 1; writeCommittedConservativeRowForTimestamp(timestamp, MAX_CELLS_DEDICATED * 2 + 1); DedicatedRows expectedDedicatedRows = DedicatedRows.of(LongStream.range(0, 3) .mapToObj(rowNumber -> ImmutableTargetedSweepMetadata.builder() .conservative(true) .dedicatedRow(true) .dedicatedRowNumber(rowNumber) .shard(0) .build() .persistToBytes()) .map(metadata -> SweepableCellsRow.of(timestamp, metadata)) .collect(Collectors.toList())); assertThat(readConservative(0, TS_FINE_PARTITION, TS - 1, SMALL_SWEEP_TS).dedicatedRows()) .isEqualTo(expectedDedicatedRows); }
SweepBatch getNextBatchToSweep(ShardAndStrategy shardStrategy, long lastSweptTs, long sweepTs) { return sweepableTimestamps.nextSweepableTimestampPartition(shardStrategy, lastSweptTs, sweepTs) .map(fine -> sweepableCells.getBatchForPartition(shardStrategy, fine, lastSweptTs, sweepTs)) .orElse(SweepBatch.of(ImmutableList.of(), DedicatedRows.of(ImmutableList.of()), sweepTs - 1L)); } }
private DedicatedRows getDedicatedRowsToClear(List<SweepableCellsRow> rows, TimestampsToSweep tsToSweep) { return DedicatedRows.of(rows.stream() .filter(row -> { TargetedSweepMetadata metadata = TargetedSweepMetadata.BYTES_HYDRATOR.hydrateFromBytes(row.getMetadata()); checkState(metadata.dedicatedRow(), "Row not a dedicated row", SafeArg.of("row", row)); return tsToSweep.timestampsDescending().contains(row.getTimestampPartition()); }).collect(Collectors.toList())); }