@Test public void lastSweptTimestampIsMinimumOfSweepTsAndEndOfFinePartitionWhenNoMatches() { SweepBatch conservativeBatch = readConservative(shardCons + 1, TS_FINE_PARTITION, TS - 1, SMALL_SWEEP_TS); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(SMALL_SWEEP_TS - 1); conservativeBatch = readConservative(shardCons + 1, TS_FINE_PARTITION, TS - 1, Long.MAX_VALUE); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(endOfFinePartitionForTs(TS)); }
@Test public void lastSweptTimestampIsMinimumOfSweepTsAndEndOfFinePartitionWhenThereAreMatches() { SweepBatch conservativeBatch = readConservative(shardCons, TS_FINE_PARTITION, TS - 1, SMALL_SWEEP_TS); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(SMALL_SWEEP_TS - 1); conservativeBatch = readConservative(shardCons, TS_FINE_PARTITION, TS - 1, Long.MAX_VALUE); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(endOfFinePartitionForTs(TS)); }
@Test public void readOnlyMostRecentTimestampForRange() { writeToDefaultCellCommitted(sweepableCells, TS - 1, TABLE_CONS); writeToDefaultCellCommitted(sweepableCells, TS + 2, TABLE_CONS); writeToDefaultCellCommitted(sweepableCells, TS - 2, TABLE_CONS); writeToDefaultCellCommitted(sweepableCells, TS + 1, TABLE_CONS); SweepBatch conservativeBatch = readConservative(shardCons, TS_FINE_PARTITION, TS - 3, TS); assertThat(conservativeBatch.writes()).containsExactly(WriteInfo.write(TABLE_CONS, DEFAULT_CELL, TS - 1)); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(TS - 1); conservativeBatch = readConservative(shardCons, TS_FINE_PARTITION, TS - 3, SMALL_SWEEP_TS); assertThat(conservativeBatch.writes()).containsExactly(WriteInfo.write(TABLE_CONS, DEFAULT_CELL, TS + 2)); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(SMALL_SWEEP_TS - 1); }
log.debug("Put {} ranged tombstones and swept up to timestamp {} for {}.", SafeArg.of("tombstones", sweepBatch.writes().size()), SafeArg.of("lastSweptTs", sweepBatch.lastSweptTimestamp()), SafeArg.of("shardStrategy", shardStrategy.toText())); cleaner.clean(shardStrategy, lastSweptTs, sweepBatch.lastSweptTimestamp(), sweepBatch.dedicatedRows()); metrics.updateProgressForShard(shardStrategy, sweepBatch.lastSweptTimestamp());
@Test public void returnWhenMoreThanSweepBatchSizeWithRepeatsHasFewerEntries() { useSingleShard(); int iterationWrites = 1 + SWEEP_BATCH_SIZE / 5; for (int i = 1; i <= 10; i++) { writeCommittedConservativeRowZero(i, iterationWrites); } SweepBatch conservativeBatch = readConservative(0, 0L, -1L, SMALL_SWEEP_TS); assertThat(conservativeBatch.writes().size()).isEqualTo(iterationWrites); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(5); SweepMetricsAssert.assertThat(metricsManager).hasEnqueuedWritesConservativeEqualTo( 10 * iterationWrites + 1); SweepMetricsAssert.assertThat(metricsManager).hasEntriesReadConservativeEqualTo( 5 * iterationWrites); SweepMetricsAssert.assertThat(metricsManager).hasAbortedWritesDeletedConservativeEquals(0); }
@Test public void returnWhenMoreThanSweepBatchSize() { useSingleShard(); long iterationWrites = 1 + SWEEP_BATCH_SIZE / 5; for (int i = 1; i <= 10; i++) { writeCommittedConservativeRowForTimestamp(i, iterationWrites); } SweepBatch conservativeBatch = readConservative(0, 0L, -1L, SMALL_SWEEP_TS); assertThat(conservativeBatch.writes().size()).isEqualTo(SWEEP_BATCH_SIZE + 5); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(5); SweepMetricsAssert.assertThat(metricsManager).hasEnqueuedWritesConservativeEqualTo( 10 * iterationWrites + 1); SweepMetricsAssert.assertThat(metricsManager).hasEntriesReadConservativeEqualTo( 5 * iterationWrites); SweepMetricsAssert.assertThat(metricsManager).hasAbortedWritesDeletedConservativeEquals(0); }
@Test public void canReadMultipleEntriesInSingleShardDifferentTransactions() { writeToCellCommitted(sweepableCells, TS, getCellWithFixedHash(1), TABLE_CONS); writeToCellCommitted(sweepableCells, TS + 1, getCellWithFixedHash(2), TABLE_CONS); SweepBatch conservativeBatch = readConservative(FIXED_SHARD, TS_FINE_PARTITION, TS - 1, TS + 2); assertThat(conservativeBatch.writes()).containsExactlyInAnyOrder( WriteInfo.write(TABLE_CONS, getCellWithFixedHash(1), TS), WriteInfo.write(TABLE_CONS, getCellWithFixedHash(2), TS + 1)); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(TS + 1); }
@Test public void returnNothingWhenMoreThanSweepBatchUncommitted() { useSingleShard(); int iterationWrites = 1 + SWEEP_BATCH_SIZE / 5; for (int i = 1; i <= 10; i++) { writeWithoutCommitConservative(i, i, iterationWrites); } writeCommittedConservativeRowForTimestamp(10, iterationWrites); SweepBatch conservativeBatch = readConservative(0, 0L, -1L, SMALL_SWEEP_TS); assertThat(conservativeBatch.writes()).isEmpty(); assertThat(conservativeBatch.lastSweptTimestamp()).isEqualTo(5); SweepMetricsAssert.assertThat(metricsManager).hasEnqueuedWritesConservativeEqualTo( 11 * iterationWrites + 1); SweepMetricsAssert.assertThat(metricsManager).hasEntriesReadConservativeEqualTo( 5 * iterationWrites); SweepMetricsAssert.assertThat(metricsManager).hasAbortedWritesDeletedConservativeEquals( 5 * iterationWrites); }
log.debug("Put {} ranged tombstones and swept up to timestamp {} for {}.", SafeArg.of("tombstones", sweepBatch.writes().size()), SafeArg.of("lastSweptTs", sweepBatch.lastSweptTimestamp()), SafeArg.of("shardStrategy", shardStrategy.toText())); cleaner.clean(shardStrategy, lastSweptTs, sweepBatch.lastSweptTimestamp(), sweepBatch.dedicatedRows()); metrics.updateProgressForShard(shardStrategy, sweepBatch.lastSweptTimestamp());