code: private synchronized void initiateRetry() {
      retryCount += 1;
      currentListener = new RetryingBlockFetchListener();
  
      logger.info("Retrying fetch ({}/{}) for {} outstanding blocks after {} ms",
        retryCount, maxRetries, outstandingBlocksIds.size(), retryWaitTime);
  
      executorService.submit(() -> {
        Uninterruptibles.sleepUninterruptibly(retryWaitTime, TimeUnit.MILLISECONDS);
        fetchAllOutstanding();
      });
    }
docs: Lightweight method which initiates a retry in a different thread. The retry will involve
  calling fetchAllOutstanding() after a configured wait time.