private List<SweepableCellsRow> computeDedicatedRows(SweepableCellsRow row, SweepableCellsTable.SweepableCellsColumn col) { TargetedSweepMetadata metadata = TargetedSweepMetadata.BYTES_HYDRATOR.hydrateFromBytes(row.getMetadata()); long timestamp = getTimestamp(row, col); int numberOfDedicatedRows = writeIndexToNumberOfDedicatedRows(col.getWriteIndex()); List<SweepableCellsRow> dedicatedRows = new ArrayList<>(); for (int i = 0; i < numberOfDedicatedRows; i++) { byte[] dedicatedMetadata = ImmutableTargetedSweepMetadata.builder() .from(metadata) .dedicatedRow(true) .dedicatedRowNumber(i) .build() .persistToBytes(); dedicatedRows.add(SweepableCellsRow.of(timestamp, dedicatedMetadata)); } return dedicatedRows; }
@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); }
@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 List<SweepableCellsRow> computeDedicatedRows(SweepableCellsRow row, SweepableCellsTable.SweepableCellsColumn col) { TargetedSweepMetadata metadata = TargetedSweepMetadata.BYTES_HYDRATOR.hydrateFromBytes(row.getMetadata()); long timestamp = getTimestamp(row, col); int numberOfDedicatedRows = writeIndexToNumberOfDedicatedRows(col.getWriteIndex()); List<SweepableCellsRow> dedicatedRows = new ArrayList<>(); for (int i = 0; i < numberOfDedicatedRows; i++) { byte[] dedicatedMetadata = ImmutableTargetedSweepMetadata.builder() .from(metadata) .dedicatedRow(true) .dedicatedRowNumber(i) .build() .persistToBytes(); dedicatedRows.add(SweepableCellsRow.of(timestamp, dedicatedMetadata)); } return dedicatedRows; }
private SweepableCellsRow computeRow(PartitionInfo info, boolean isDedicatedRow, long dedicatedRowNumber) { TargetedSweepMetadata metadata = ImmutableTargetedSweepMetadata.builder() .conservative(info.isConservative().isTrue()) .dedicatedRow(isDedicatedRow) .shard(info.shard()) .dedicatedRowNumber(dedicatedRowNumber) .build(); long tsOrPartition = getTimestampOrPartition(info, isDedicatedRow); return SweepableCellsRow.of(tsOrPartition, metadata.persistToBytes()); }
private SweepableCellsRow computeRow(long partitionFine, ShardAndStrategy shardStrategy) { TargetedSweepMetadata metadata = ImmutableTargetedSweepMetadata.builder() .conservative(shardStrategy.isConservative()) .dedicatedRow(false) .shard(shardStrategy.shard()) .dedicatedRowNumber(0) .build(); return SweepableCellsRow.of(partitionFine, metadata.persistToBytes()); }
@Test public void cleanupNonDedicatedRow() { useSingleShard(); writeCommittedConservativeRowForTimestamp(TS + 1, MAX_CELLS_GENERIC); writeCommittedConservativeRowForTimestamp(TS + 3, MAX_CELLS_GENERIC); writeCommittedConservativeRowForTimestamp(TS + 5, MAX_CELLS_GENERIC); sweepableCells.deleteNonDedicatedRow(ShardAndStrategy.conservative(0), TS_FINE_PARTITION); SweepableCellsRow row = SweepableCellsRow.of(TS_FINE_PARTITION, ImmutableTargetedSweepMetadata.builder() .conservative(true) .dedicatedRow(false) .shard(0) .dedicatedRowNumber(0) .build() .persistToBytes()); verifyRowsDeletedFromSweepQueue(ImmutableList.of(row)); }
private SweepableCellsRow computeRow(PartitionInfo info, boolean isDedicatedRow, long dedicatedRowNumber) { TargetedSweepMetadata metadata = ImmutableTargetedSweepMetadata.builder() .conservative(info.isConservative().isTrue()) .dedicatedRow(isDedicatedRow) .shard(info.shard()) .dedicatedRowNumber(dedicatedRowNumber) .build(); long tsOrPartition = getTimestampOrPartition(info, isDedicatedRow); return SweepableCellsRow.of(tsOrPartition, metadata.persistToBytes()); }
private SweepableCellsRow computeRow(long partitionFine, ShardAndStrategy shardStrategy) { TargetedSweepMetadata metadata = ImmutableTargetedSweepMetadata.builder() .conservative(shardStrategy.isConservative()) .dedicatedRow(false) .shard(shardStrategy.shard()) .dedicatedRowNumber(0) .build(); return SweepableCellsRow.of(partitionFine, metadata.persistToBytes()); }