Class ByteStringRangeHelper

java.lang.Object
org.apache.beam.sdk.io.gcp.bigtable.changestreams.ByteStringRangeHelper

@Internal public class ByteStringRangeHelper extends Object
Helper functions to evaluate the completeness of collection of ByteStringRanges.
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    static boolean
    coverSameKeySpace(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> parentPartitions, com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange childPartition)
    Returns true if parentPartitions form a proper superset of childPartition.
    static boolean
    doPartitionsOverlap(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange first, com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange second)
    Returns true if the two ByteStringRange overlaps, otherwise false.
    static String
    formatByteStringRange(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange partition)
    Returns formatted string of a partition for debugging.
    static com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange
    getIntersectingPartition(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange p1, com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange p2)
    Return the overlapping parts of 2 partitions.
    static List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange>
    getMissingPartitionsFrom(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions, ByteString start, ByteString end)
    Return missing partitions within partitions that are within start and end.
    static List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange>
    getMissingPartitionsFromEntireKeySpace(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions)
    Return missing partitions from the entire keyspace.
    static List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange>
    getOverlappingPartitions(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions)
    Return a list of overlapping partitions.
    static boolean
    isValidPartition(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange partition)
    Checks if the partition's start key is before its end key.
    static String
    partitionsToString(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions)
    Convert partitions to a string for debugging.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Constructor Details

    • ByteStringRangeHelper

      public ByteStringRangeHelper()
  • Method Details

    • coverSameKeySpace

      public static boolean coverSameKeySpace(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> parentPartitions, com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange childPartition)
      Returns true if parentPartitions form a proper superset of childPartition.

      If ordered parentPartitions row ranges form a contiguous range without any overlaps, and start key equals to childPartition's start key, and end key equals to childPartition's end key, then parentPartitions form a proper superset of childPartition.

      Returns false if there are overlaps or missing partitions in parentPartitions.

      Parameters:
      parentPartitions - list of partitions to determine if it forms an exact contiguous range
      childPartition - the partition to match
      Returns:
      true if parentPartitions covers the same key space as childPartition, otherwise false.
    • partitionsToString

      public static String partitionsToString(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions)
      Convert partitions to a string for debugging.
      Parameters:
      partitions - to print
      Returns:
      string representation of partitions
    • getMissingPartitionsFrom

      public static List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> getMissingPartitionsFrom(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions, ByteString start, ByteString end)
      Return missing partitions within partitions that are within start and end. Gaps in partitions that are outside of start and end are ignored.
      Parameters:
      partitions - find missing partitions within
      start - start of the search range
      end - end of the search range
      Returns:
      missing partitions within the range
    • getMissingPartitionsFromEntireKeySpace

      public static List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> getMissingPartitionsFromEntireKeySpace(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions)
      Return missing partitions from the entire keyspace.
      Parameters:
      partitions - find missing partitions within
      Returns:
      a list of missing partitions.
    • getOverlappingPartitions

      public static List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> getOverlappingPartitions(List<com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange> partitions)
      Return a list of overlapping partitions. The partitions outputted are valid partitions i.e. start invalid input: '<' end. This represents 2 ordered partitions overlapping because the 2nd partition starts before the 1st ended. If end == start, it's not considered overlap.
      Parameters:
      partitions - find overlaps within
      Returns:
      a list of overlapping partitions.
    • formatByteStringRange

      public static String formatByteStringRange(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange partition)
      Returns formatted string of a partition for debugging.
      Parameters:
      partition - partition to format.
      Returns:
      String representation of partition.
    • doPartitionsOverlap

      public static boolean doPartitionsOverlap(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange first, com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange second)
      Returns true if the two ByteStringRange overlaps, otherwise false. End = Start is not considered overlapping because end is open and start is closed.

      Assume the two ByteStringRange are valid such that the start invalid input: '<'= end. There are 2 scenarios that's considered NOT overlapping. Otherwise, they are overlapping.

      • The second's start key is same or after first's end key
      • The first's start key is same or after second's end key
      Parameters:
      first - first ByteStringRange
      second - second ByteStringRange
      Returns:
      true if the two ByteStringRange overlaps, otherwise false.
    • isValidPartition

      public static boolean isValidPartition(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange partition)
      Checks if the partition's start key is before its end key.
      Parameters:
      partition - the partition to verify.
      Returns:
      true if partition is valid, otherwise false.
    • getIntersectingPartition

      public static com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange getIntersectingPartition(com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange p1, com.google.cloud.bigtable.data.v2.models.Range.ByteStringRange p2) throws IllegalArgumentException
      Return the overlapping parts of 2 partitions. Throw IllegalArgumentException if the 2 partitions don't overlap at all.
      Parameters:
      p1 - first partition
      p2 - second partition
      Returns:
      the intersection of the 2 partitions
      Throws:
      IllegalArgumentException - if the 2 partitions don't overlap at all