@Test public void canReadForAbortedTransactionMultipleTimes() { long timestamp = 2 * TS_FINE_GRANULARITY + 1L; writeToDefaultCellAborted(sweepableTimestamps, timestamp, TABLE_CONS); assertThat(readConservative(CONS_SHARD)).contains(tsPartitionFine(timestamp)); assertThat(readConservative(CONS_SHARD)).contains(tsPartitionFine(timestamp)); }
@Test public void canReadForUncommittedTransactionMultipleTimes() { long timestamp = 3 * TS_FINE_GRANULARITY + 1L; writeToDefaultCellUncommitted(sweepableTimestamps, timestamp, TABLE_CONS); assertThat(readConservative(CONS_SHARD)).contains(tsPartitionFine(timestamp)); assertThat(readConservative(CONS_SHARD)).contains(tsPartitionFine(timestamp)); }
@Test public void cannotReadForWrongSweepStrategy() { assertThat(readThorough(shardCons)).isEmpty(); assertThat(readConservative(shardThor)).isEmpty(); }
@Test public void canReadNextTimestampWhenSweepTsIsLarge() { assertThat(readConservative(shardCons)).contains(TS_FINE_PARTITION); assertThat(readThorough(shardThor)).contains(TS2_FINE_PARTITION); }
@Test public void cannotReadForWrongShard() { assertThat(readConservative(shardCons + 1)).isEmpty(); assertThat(readThorough(shardThor + 1)).isEmpty(); }
@Test public void getCorrectNextTimestampWhenMultipleCandidates() { for (long timestamp = 1000L; tsPartitionFine(timestamp) < 10L; timestamp += TS_FINE_GRANULARITY / 5) { writeToDefaultCellCommitted(sweepableTimestamps, timestamp, TABLE_CONS); } assertThat(readConservative(shardCons)).contains(tsPartitionFine(1000L)); progress.updateLastSweptTimestamp(conservative(shardCons), 2L * TS_FINE_GRANULARITY); assertThat(readConservative(shardCons)).contains(tsPartitionFine(2L * TS_FINE_GRANULARITY + 1000L)); setSweepTimestampAndGet(4 * TS_FINE_GRANULARITY); assertThat(readConservative(shardCons)).contains(tsPartitionFine(2L * TS_FINE_GRANULARITY + 1000L)); }
@Test public void canReadNextTsForTombstone() { long timestamp = 10L; putTombstoneToDefaultCommitted(sweepableTimestamps, timestamp, TABLE_CONS); assertThat(readConservative(CONS_SHARD)).contains(tsPartitionFine(timestamp)); }
@Test public void noNextTimestampWhenSweepTimestampInSamePartitionAndLower() { immutableTs = minTsForFinePartition(TS_FINE_PARTITION); assertThat(tsPartitionFine(getSweepTsCons())).isEqualTo(TS_FINE_PARTITION); assertThat(getSweepTsCons()).isLessThan(TS); assertThat(readConservative(shardCons)).isEmpty(); }
@Test public void canReadNextTimestampWhenSweepTimestampInSamePartitionAndGreater() { immutableTs = maxTsForFinePartition(TS_FINE_PARTITION); assertThat(tsPartitionFine(getSweepTsCons())).isEqualTo(TS_FINE_PARTITION); assertThat(getSweepTsCons()).isGreaterThan(TS); assertThat(readConservative(shardCons)).contains(TS_FINE_PARTITION); }
@Test public void canReadNextIfNotProgressedBeyondForConservative() { progress.updateLastSweptTimestamp(conservative(shardCons), TS - 1); assertThat(readConservative(shardCons)).contains(TS_FINE_PARTITION); }
@Test public void noNextTimestampWhenImmutableTsInSmallerPartitionForEitherSweepStrategy() { immutableTs = TS - TS_FINE_GRANULARITY; assertThat(tsPartitionFine(immutableTs)).isLessThan(TS_FINE_PARTITION); assertThat(readConservative(shardCons)).isEmpty(); assertThat(tsPartitionFine(immutableTs)).isLessThan(TS2_FINE_PARTITION); assertThat(readThorough(shardThor)).isEmpty(); }
@Test public void noNextTimestampWhenUnreadableTsInSmallerPartitionForConservativeOnly() { unreadableTs = TS - TS_FINE_GRANULARITY; assertThat(tsPartitionFine(unreadableTs)).isLessThan(TS_FINE_PARTITION); assertThat(readConservative(shardCons)).isEmpty(); assertThat(tsPartitionFine(unreadableTs)).isLessThan(TS2_FINE_PARTITION); assertThat(readThorough(shardThor)).contains(TS2_FINE_PARTITION); }
@Test public void canReadNextTimestampIfProgressedBeyondButInSamePartitionForConservative() { progress.updateLastSweptTimestamp(conservative(shardCons), maxTsForFinePartition(TS_FINE_PARTITION) - 1); assertThat(readConservative(shardCons)).contains(TS_FINE_PARTITION); }
@Test public void noNextTimestampIfProgressedToEndOfPartitionForConservative() { progress.updateLastSweptTimestamp(conservative(shardCons), maxTsForFinePartition(TS_FINE_PARTITION)); assertThat(readConservative(shardCons)).isEmpty(); }
@Test public void canReadNextWhenOtherShardsAndStrategiesProgressToEndOfPartitionForConservative() { progress.updateLastSweptTimestamp(thorough(shardCons), maxTsForFinePartition(TS_FINE_PARTITION)); progress.updateLastSweptTimestamp(conservative(shardThor), maxTsForFinePartition(TS_FINE_PARTITION)); progress.updateLastSweptTimestamp(thorough(shardThor), maxTsForFinePartition(TS_FINE_PARTITION)); assertThat(readConservative(shardCons)).contains(TS_FINE_PARTITION); }