Interface PullingAsyncDataInput<T>

All Superinterfaces:
AvailabilityProvider
All Known Implementing Classes:
CheckpointedInputGate, IndexedInputGate, InputGate, InputGateWithMetrics, SingleInputGate, UnionInputGate

@Internal public interface PullingAsyncDataInput<T> extends AvailabilityProvider
Interface defining couple of essential methods for asynchronous and non blocking data polling.

For the most efficient usage, user of this class is supposed to call pollNext() until it returns that no more elements are available. If that happens, he should check if input isFinished(). If not, he should wait for AvailabilityProvider.getAvailableFuture() CompletableFuture to be completed. For example:


 AsyncDataInput<T> input = ...;
 while (!input.isFinished()) {
 	Optional<T> next;

 	while (true) {
 		next = input.pollNext();
 		if (!next.isPresent()) {
 			break;
 		}
 		// do something with next
 	}

 	input.getAvailableFuture().get();
 }
 
  • Method Details

    • pollNext

      Optional<T> pollNext() throws Exception
      Poll the next element. This method should be non blocking.
      Returns:
      Optional.empty() will be returned if there is no data to return or if isFinished() returns true. Otherwise Optional.of(element).
      Throws:
      Exception
    • isFinished

      boolean isFinished()
      Returns:
      true if is finished and for example end of input was reached, false otherwise.
    • hasReceivedEndOfData

      Tells if we consumed all available data.

      Moreover it tells us the reason why there is no more data incoming. If any of the upstream subtasks finished because of the stop-with-savepoint --no-drain, we should not drain the input. See also StopMode.