code: protected void updateCurrentIterator() throws DataSourceReadException {
          if (currentIterator == null) {
              if (iteratorChain.isEmpty()) {
                  currentIterator = new EmptyDataStreamingEventIterator();
              } else {
                  currentIterator = iteratorChain.remove();
              }
              // set last used iterator here, in case the user calls remove
              // before calling hasNext() or next() (although they shouldn't)
              lastUsedIterator = currentIterator;
          }
  
          while (currentIterator.hasNext() == false && !iteratorChain.isEmpty()) {
              currentIterator.close();
              currentIterator = iteratorChain.remove();
          }
      }
docs: Updates the current iterator field to ensure that the current Iterator is
  not exhausted