/** * Filters out all writes made into tables with SweepStrategy NOTHING, then partitions the writes according to * shard, strategy, and start timestamp of the transaction that performed the write. */ public Map<PartitionInfo, List<WriteInfo>> filterAndPartition(List<WriteInfo> writes) { return partitionWritesByShardStrategyTimestamp(filterOutUnsweepableTables(writes)); }
@Test public void changingNumberOfPartitionsIsReflectedInPartitionInfo() { WriteInfo write = getWriteInfo(CONSERVATIVE, 1, 1, 100L); PartitionInfo partition1 = Iterables.getOnlyElement( partitioner.partitionWritesByShardStrategyTimestamp(ImmutableList.of(write)).keySet()); numShards += 1; PartitionInfo partition2 = Iterables.getOnlyElement( partitioner.partitionWritesByShardStrategyTimestamp(ImmutableList.of(write)).keySet()); assertThat(partition1.isConservative()).isEqualTo(partition2.isConservative()); assertThat(partition1.timestamp()).isEqualTo(partition2.timestamp()); assertThat(partition1.shard()).isNotEqualTo(partition2.shard()); }
@Test public void partitionWritesByShardStrategyTimestampGroupsOnShardClash() { List<WriteInfo> writes = new ArrayList<>(); for (int i = 0; i <= numShards; i++) { writes.add(getWriteInfoWithFixedCellHash(CONSERVATIVE, i)); } Map<PartitionInfo, List<WriteInfo>> partitions = partitioner.partitionWritesByShardStrategyTimestamp(writes); assertThat(partitions.keySet()) .containsExactly(PartitionInfo.of(writes.get(0).toShard(numShards), true, 1L)); assertThat(Iterables.getOnlyElement(partitions.values())).isEqualTo(writes); }
@Test public void partitionWritesByShardStrategyTimestampPartitionsIntoSeparatePartitions() { List<WriteInfo> writes = ImmutableList.of( getWriteInfo(CONSERVATIVE, 0, 0, 100L), getWriteInfo(CONSERVATIVE, 1, 0, 100L), getWriteInfo(CONSERVATIVE, 0, 3, 100L), getWriteInfo(CONSERVATIVE, 0, 0, 200L), getWriteInfo(CONSERVATIVE2, 0, 0, 100L), getWriteInfo(THOROUGH, 0, 0, 100L)); Map<PartitionInfo, List<WriteInfo>> partitions = partitioner.partitionWritesByShardStrategyTimestamp(writes); assertThat(partitions.size()).isEqualTo(6); }
/** * Filters out all writes made into tables with SweepStrategy NOTHING, then partitions the writes according to * shard, strategy, and start timestamp of the transaction that performed the write. */ public Map<PartitionInfo, List<WriteInfo>> filterAndPartition(List<WriteInfo> writes) { return partitionWritesByShardStrategyTimestamp(filterOutUnsweepableTables(writes)); }