docs: public void attachDS(Iterator<DataSet> iterator) {
          log.debug("Attaching thread...");
  
          //Count the number of minibatches - used for reporting/debugging purposes
          if(iteratorDataSetCount.get() == null)
              iteratorDataSetCount.set(new AtomicInteger(0));
          AtomicInteger count = iteratorDataSetCount.get();
          count.set(0);
  
          // we're creating our Observable wrapper
          VirtualIterator<DataSet> wrapped = new VirtualIterator<>(new CountingIterator<>(iterator, count));
  
          // and creating Observer which will be used to monitor progress within iterator
          BlockingObserver obs = new BlockingObserver(exceptionEncountered);
          wrapped.addObserver(obs);
  
          // putting that "somewhere"
          iteratorsDS.add(wrapped);
  
          // storing observer into ThreadLocal, since we're going to use that later
          observer.set(obs);
      }