private Map<Integer, Integer> enqueueAtLeastThresholdWritesInDefaultShardWithStartTs(long threshold, long startTs) { List<WriteInfo> writeInfos = new ArrayList<>(); int counter = 0; while (writeInfos.stream().filter(write -> write.toShard(DEFAULT_SHARDS) == CONS_SHARD).count() < threshold) { writeInfos.addAll(generateHundredWrites(counter++, startTs)); } sweepQueue.enqueue(writeInfos); return writeInfos.stream() .collect(Collectors.toMap(write -> write.toShard(DEFAULT_SHARDS), write -> 1, (fst, snd) -> fst + snd)); }
private PartitionInfo getPartitionInfo(WriteInfo write, int shards) { return PartitionInfo.of(write.toShard(shards), isConservative(write), write.timestamp()); }
@Test public void timestampIsIgnoredForSharding() { assertThat(getWriteAt(ONE)).isNotEqualTo(getWriteAt(TWO)); assertThat(getTombstoneAt(ONE)).isNotEqualTo(getTombstoneAt(TWO)); assertThat(getWriteAt(ONE).toShard(SHARDS)).isEqualTo(getWriteAt(TWO).toShard(SHARDS)); assertThat(getTombstoneAt(ONE).toShard(SHARDS)).isEqualTo(getTombstoneAt(TWO).toShard(SHARDS)); }
@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); }
private int write(SweepQueueTable writer, long ts, Cell cell, boolean isTombstone, TableReference tableRef) { WriteInfo write = WriteInfo.of(WriteReference.of(tableRef, cell, isTombstone), ts); writer.enqueue(ImmutableList.of(write)); return write.toShard(numShards); }
private PartitionInfo getPartitionInfo(WriteInfo write, int shards) { return PartitionInfo.of(write.toShard(shards), isConservative(write), write.timestamp()); }