public class ReadChangeStreamPartitionRangeTracker extends TimestampRangeTracker
TimestampRangeTracker
. It has a different logic for tryClaim and trySplit methods. It ignores
claims for the same timestamp multiple times. This is because several change stream records might
have the same timestamp, thus leading to multiple claims of the same Timestamp
. Other
than that, it always denies splits for the InitialPartition.PARTITION_TOKEN
, since we
only need to perform this query once.RestrictionTracker.HasProgress, RestrictionTracker.IsBounded, RestrictionTracker.Progress, RestrictionTracker.TruncateResult<RestrictionT>
lastAttemptedPosition, lastClaimedPosition, range, timeSupplier
Constructor and Description |
---|
ReadChangeStreamPartitionRangeTracker(PartitionMetadata partition,
TimestampRange range)
Receives the partition that will be queried and the timestamp range that belongs to it.
|
Modifier and Type | Method and Description |
---|---|
boolean |
tryClaim(com.google.cloud.Timestamp position)
Attempts to claim the given position.
|
@Nullable SplitResult<TimestampRange> |
trySplit(double fractionOfRemainder)
If the partition token is the
InitialPartition.PARTITION_TOKEN , it does not allow for
splits (returns null). |
checkDone, currentRestriction, getProgress, isBounded, setTimeSupplier, tryClaim
public ReadChangeStreamPartitionRangeTracker(PartitionMetadata partition, TimestampRange range)
partition
- the partition that will use the trackerrange
- closed / open range interval for the start / end times of the given partitionpublic boolean tryClaim(com.google.cloud.Timestamp position)
Must be equal or larger than the last successfully claimed position.
tryClaim
in class TimestampRangeTracker
true
if the position was successfully claimed, false
if it is outside
the current TimestampRange
of this tracker (in that case this operation is a
no-op).public @Nullable SplitResult<TimestampRange> trySplit(double fractionOfRemainder)
InitialPartition.PARTITION_TOKEN
, it does not allow for
splits (returns null).
If a split is successful (non-null), then the restriction is updated to the result of the primary.
trySplit
in class TimestampRangeTracker
fractionOfRemainder
- A hint as to the fraction of work the primary restriction should
represent based upon the current known remaining amount of work.SplitResult
if a split was possible or null
if the splitPosition
is beyond the end of the range.