Class ReadChangeStreamPartitionRangeTracker
java.lang.Object
org.apache.beam.sdk.transforms.splittabledofn.RestrictionTracker<TimestampRange,com.google.cloud.Timestamp>
org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.TimestampRangeTracker
org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.ReadChangeStreamPartitionRangeTracker
- All Implemented Interfaces:
RestrictionTracker.HasProgress
This restriction tracker delegates most of its behavior to an internal
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.-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.beam.sdk.transforms.splittabledofn.RestrictionTracker
RestrictionTracker.HasProgress, RestrictionTracker.IsBounded, RestrictionTracker.Progress, RestrictionTracker.TruncateResult<RestrictionT>
-
Field Summary
Fields inherited from class org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.TimestampRangeTracker
lastAttemptedPosition, lastClaimedPosition, range, timeSupplier
-
Constructor Summary
ConstructorsConstructorDescriptionReadChangeStreamPartitionRangeTracker
(PartitionMetadata partition, TimestampRange range) Receives the partition that will be queried and the timestamp range that belongs to it. -
Method Summary
Modifier and TypeMethodDescriptionboolean
tryClaim
(com.google.cloud.Timestamp position) Attempts to claim the given position.trySplit
(double fractionOfRemainder) If the partition token is theInitialPartition.PARTITION_TOKEN
, it does not allow for splits (returns null).Methods inherited from class org.apache.beam.sdk.io.gcp.spanner.changestreams.restriction.TimestampRangeTracker
checkDone, currentRestriction, getProgress, isBounded, setTimeSupplier, tryClaim
-
Constructor Details
-
ReadChangeStreamPartitionRangeTracker
Receives the partition that will be queried and the timestamp range that belongs to it.- Parameters:
partition
- the partition that will use the trackerrange
- closed / open range interval for the start / end times of the given partition
-
-
Method Details
-
tryClaim
public boolean tryClaim(com.google.cloud.Timestamp position) Attempts to claim the given position.Must be equal or larger than the last successfully claimed position.
- Overrides:
tryClaim
in classTimestampRangeTracker
- Returns:
true
if the position was successfully claimed,false
if it is outside the currentTimestampRange
of this tracker (in that case this operation is a no-op).
-
trySplit
If the partition token is theInitialPartition.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.
- Overrides:
trySplit
in classTimestampRangeTracker
- Parameters:
fractionOfRemainder
- A hint as to the fraction of work the primary restriction should represent based upon the current known remaining amount of work.- Returns:
- a
SplitResult
if a split was possible ornull
if thesplitPosition
is beyond the end of the range.
-