in spanner-data-validator-java/src/main/java/com/google/migration/partitioning/UUIDPartitionRangeListFetcher.java [120:163]
public List<PartitionRange> getPartitionRangesWithPartitionFilter(String startStr,
String endStr,
Integer partitionCount,
Integer partitionFilterRatio) {
UUID start = UUID.fromString(startStr);
UUID end = UUID.fromString(endStr);
// UUID max
BigInteger uuidMax = UUIDHelpers.uuidToBigInt(end);
BigInteger uuidMin = UUIDHelpers.uuidToBigInt(start);
BigInteger fullRange = uuidMax.subtract(uuidMin);
BigInteger stepSize = fullRange.divide(BigInteger.valueOf(partitionCount.intValue()));
if(partitionFilterRatio > 0) {
if(partitionFilterRatio > partitionCount) {
throw new RuntimeException("PartitionFilterRatio < PartitionCount!");
}
}
ArrayList<PartitionRange> bRanges = new ArrayList<>();
// Account for first UUID
bRanges.add(new PartitionRange(start.toString(), start.toString()));
BigInteger maxRange = uuidMin.add(BigInteger.ONE);
for(Integer i = 0; i < partitionCount - 1; i++) {
BigInteger minRange = maxRange;
maxRange = minRange.add(stepSize);
if(partitionFilterRatio > 0 && i % partitionFilterRatio != 0) continue;
PartitionRange range = new PartitionRange(UUIDHelpers.bigIntToUUID(minRange).toString(),
UUIDHelpers.bigIntToUUID(maxRange).toString());
bRanges.add(range);
}
PartitionRange range = new PartitionRange(UUIDHelpers.bigIntToUUID(maxRange).toString(),
UUIDHelpers.bigIntToUUID(uuidMax).toString());
bRanges.add(range);
return bRanges;
}