Package org.apache.beam.sdk.io.range
Class ByteKeyRangeTracker
java.lang.Object
org.apache.beam.sdk.io.range.ByteKeyRangeTracker
- All Implemented Interfaces:
RangeTracker<ByteKey>
- See Also:
-
Method Summary
Modifier and TypeMethodDescriptiondouble
Returns the approximate fraction of positions in the source that have been consumed by successfulRangeTracker.tryReturnRecordAt(boolean, PositionT)
calls, or 0.0 if no such calls have happened.getRange()
Returns the current range.long
Returns the starting position of the current range, inclusive.Returns the ending position of the current range, exclusive.boolean
isDone()
boolean
markDone()
Marks this range tracker as being done.static ByteKeyRangeTracker
of
(ByteKeyRange range) Instantiates a newByteKeyRangeTracker
with the specified range.toString()
boolean
tryReturnRecordAt
(boolean isAtSplitPoint, ByteKey recordStart) Atomically determines whether a record at the given position can be returned and updates internal state.boolean
trySplitAtPosition
(ByteKey splitPosition) Atomically splits the current range [RangeTracker.getStartPosition()
,RangeTracker.getStopPosition()
) into a "primary" part [RangeTracker.getStartPosition()
,splitPosition
) and a "residual" part [splitPosition
,RangeTracker.getStopPosition()
), assuming the current last-consumed position is within [RangeTracker.getStartPosition()
, splitPosition) (i.e.,splitPosition
has not been consumed yet).
-
Method Details
-
of
Instantiates a newByteKeyRangeTracker
with the specified range. -
isDone
public boolean isDone() -
getStartPosition
Description copied from interface:RangeTracker
Returns the starting position of the current range, inclusive.- Specified by:
getStartPosition
in interfaceRangeTracker<ByteKey>
-
getStopPosition
Description copied from interface:RangeTracker
Returns the ending position of the current range, exclusive.- Specified by:
getStopPosition
in interfaceRangeTracker<ByteKey>
-
getRange
Returns the current range. -
tryReturnRecordAt
Description copied from interface:RangeTracker
Atomically determines whether a record at the given position can be returned and updates internal state. In particular:- If
isAtSplitPoint
istrue
, andrecordStart
is outside the current range, returnsfalse
; - Otherwise, updates the last-consumed position to
recordStart
and returnstrue
.
This method MUST be called on all split point records. It may be called on every record.
- Specified by:
tryReturnRecordAt
in interfaceRangeTracker<ByteKey>
- If
-
trySplitAtPosition
Description copied from interface:RangeTracker
Atomically splits the current range [RangeTracker.getStartPosition()
,RangeTracker.getStopPosition()
) into a "primary" part [RangeTracker.getStartPosition()
,splitPosition
) and a "residual" part [splitPosition
,RangeTracker.getStopPosition()
), assuming the current last-consumed position is within [RangeTracker.getStartPosition()
, splitPosition) (i.e.,splitPosition
has not been consumed yet).Updates the current range to be the primary and returns
true
. This means that all further calls on the current object will interpret their arguments relative to the primary range.If the split position has already been consumed, or if no
RangeTracker.tryReturnRecordAt(boolean, PositionT)
call was made yet, returnsfalse
. The second condition is to prevent dynamic splitting during reader start-up.- Specified by:
trySplitAtPosition
in interfaceRangeTracker<ByteKey>
-
getFractionConsumed
public double getFractionConsumed()Description copied from interface:RangeTracker
Returns the approximate fraction of positions in the source that have been consumed by successfulRangeTracker.tryReturnRecordAt(boolean, PositionT)
calls, or 0.0 if no such calls have happened.- Specified by:
getFractionConsumed
in interfaceRangeTracker<ByteKey>
-
getSplitPointsConsumed
public long getSplitPointsConsumed() -
markDone
public boolean markDone()Marks this range tracker as being done. Specifically, this will mark the current split point, if one exists, as being finished.Always returns false, so that it can be used in an implementation of
Source.Reader.start()
orSource.Reader.advance()
as follows:public boolean start() { return startImpl() && rangeTracker.tryReturnRecordAt(isAtSplitPoint, position) || rangeTracker.markDone(); }
-
toString
-