Class IteratorSourceReaderBase<E,O,IterT extends Iterator<E>,SplitT extends IteratorSourceSplit<E,IterT>>
- java.lang.Object
-
- org.apache.flink.api.connector.source.lib.util.IteratorSourceReaderBase<E,O,IterT,SplitT>
-
- Type Parameters:
E- The type of events returned by the reader.IterT- The type of the iterator that produces the events. This type exists to make the conversion between iterator andIteratorSourceSplittype safe.SplitT- The concrete type of theIteratorSourceSplitthat creates and converts the iterator that produces this reader's elements.
- All Implemented Interfaces:
AutoCloseable,CheckpointListener,SourceReader<O,SplitT>
- Direct Known Subclasses:
IteratorSourceReader
@Public public abstract class IteratorSourceReaderBase<E,O,IterT extends Iterator<E>,SplitT extends IteratorSourceSplit<E,IterT>> extends Object implements SourceReader<O,SplitT>
ASourceReaderthat returns the values of an iterator, supplied via anIteratorSourceSplit.The
IteratorSourceSplitis also responsible for taking the current iterator and turning it back into a split for checkpointing.
-
-
Field Summary
Fields Modifier and Type Field Description protected CompletableFuture<Void>availabilityThe availability future.protected SplitTcurrentSplitThe split whose data we return.protected IterTiteratorThe iterator producing data.
-
Constructor Summary
Constructors Constructor Description IteratorSourceReaderBase(SourceReaderContext context)
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description voidaddSplits(List<SplitT> splits)Adds a list of splits for this reader to read.voidclose()protected abstract Oconvert(E value)protected voidfinishSplit()CompletableFuture<Void>isAvailable()Returns a future that signals that data is available from the reader.voidnotifyNoMoreSplits()This method is called when the reader is notified that it will not receive any further splits.InputStatuspollNext(ReaderOutput<O> output)Poll the next available record into theReaderOutput.List<SplitT>snapshotState(long checkpointId)Checkpoint on the state of the source.voidstart()Start the reader.protected voidstart(SourceReaderContext context)protected InputStatustryMoveToNextSplit()-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.flink.api.common.state.CheckpointListener
notifyCheckpointAborted
-
Methods inherited from interface org.apache.flink.api.connector.source.SourceReader
handleSourceEvents, notifyCheckpointComplete, pauseOrResumeSplits
-
-
-
-
Field Detail
-
availability
protected CompletableFuture<Void> availability
The availability future. This reader is available as soon as a split is assigned.
-
iterator
@Nullable protected IterT extends Iterator<E> iterator
The iterator producing data. Non-null after a split has been assigned. This field is null or non-null always together with thecurrentSplitfield.
-
-
Constructor Detail
-
IteratorSourceReaderBase
public IteratorSourceReaderBase(SourceReaderContext context)
-
-
Method Detail
-
start
public void start()
Description copied from interface:SourceReaderStart the reader.- Specified by:
startin interfaceSourceReader<E,O>
-
start
protected void start(SourceReaderContext context)
-
pollNext
public InputStatus pollNext(ReaderOutput<O> output)
Description copied from interface:SourceReaderPoll the next available record into theReaderOutput.The implementation must make sure this method is non-blocking.
Although the implementation can emit multiple records into the given ReaderOutput, it is recommended not doing so. Instead, emit one record into the ReaderOutput and return a
InputStatus.MORE_AVAILABLEto let the caller thread know there are more records available.- Specified by:
pollNextin interfaceSourceReader<E,O>- Returns:
- The InputStatus of the SourceReader after the method invocation.
-
finishSplit
protected void finishSplit()
-
tryMoveToNextSplit
protected InputStatus tryMoveToNextSplit()
-
isAvailable
public CompletableFuture<Void> isAvailable()
Description copied from interface:SourceReaderReturns a future that signals that data is available from the reader.Once the future completes, the runtime will keep calling the
SourceReader.pollNext(ReaderOutput)method until that method returns a status other thanInputStatus.MORE_AVAILABLE. After that, the runtime will again call this method to obtain the next future. Once that completes, it will again callSourceReader.pollNext(ReaderOutput)and so on.The contract is the following: If the reader has data available, then all futures previously returned by this method must eventually complete. Otherwise the source might stall indefinitely.
It is not a problem to have occasional "false positives", meaning to complete a future even if no data is available. However, one should not use an "always complete" future in cases no data is available, because that will result in busy waiting loops calling
pollNext(...)even though no data is available.- Specified by:
isAvailablein interfaceSourceReader<E,O>- Returns:
- a future that will be completed once there is a record available to poll.
-
addSplits
public void addSplits(List<SplitT> splits)
Description copied from interface:SourceReaderAdds a list of splits for this reader to read. This method is called when the enumerator assigns a split viaSplitEnumeratorContext.assignSplit(SourceSplit, int)orSplitEnumeratorContext.assignSplits(SplitsAssignment).- Specified by:
addSplitsin interfaceSourceReader<E,O>- Parameters:
splits- The splits assigned by the split enumerator.
-
notifyNoMoreSplits
public void notifyNoMoreSplits()
Description copied from interface:SourceReaderThis method is called when the reader is notified that it will not receive any further splits.It is triggered when the enumerator calls
SplitEnumeratorContext.signalNoMoreSplits(int)with the reader's parallel subtask.- Specified by:
notifyNoMoreSplitsin interfaceSourceReader<E,O>
-
snapshotState
public List<SplitT> snapshotState(long checkpointId)
Description copied from interface:SourceReaderCheckpoint on the state of the source.- Specified by:
snapshotStatein interfaceSourceReader<E,O>- Returns:
- the state of the source.
-
close
public void close() throws Exception- Specified by:
closein interfaceAutoCloseable- Throws:
Exception
-
-