public List getPartitionRangesWithPartitionFilter()

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;
  }