@Override
  public void start(Callback<None> callback) {
    LOG.info("{} enabled", _printName);

    Callback<None> prepareWarmUpCallback = new Callback<None>() {
      @Override
      public void onError(Throwable e) {
        if (e instanceof TimeoutException)
        {
          LOG.info("{} hit timeout: {}ms. The WarmUp will continue in background", _printName, _warmUpTimeoutMillis);
          callback.onSuccess(None.none());
        }
        else
        {
          LOG.error("{} failed to fetch dual read mode, continuing warmup.", _printName, e);
        }
        continueWarmUp(callback);
      }

      @Override
      public void onSuccess(None result) {
        continueWarmUp(callback);
      }
    };

    _loadBalancer.start(new Callback<None>() {
      @Override
      public void onError(Throwable e) {
        callback.onError(e);
      }

      @Override
      public void onSuccess(None result) {
        _allStartTime = _timeSupplier.get();
        _executorService.submit(() -> prepareWarmUp(prepareWarmUpCallback));
      }
    });
  }
@Test(retryAnalyzer = ThreeRetries.class)
  public void testNoMakingWarmUpRequestsWithoutValidFiles() throws URISyntaxException, InterruptedException, ExecutionException, TimeoutException
  {
    createServicesIniFiles(UNVALID_FILES);

    TestLoadBalancer balancer = new TestLoadBalancer();
    AtomicInteger requestCount = balancer.getRequestCount();
    LoadBalancer warmUpLoadBalancer = new WarmUpLoadBalancer(balancer, balancer, Executors.newSingleThreadScheduledExecutor(),
      _tmpdir.getAbsolutePath(), MY_SERVICES_FS, _FSBasedDownstreamServicesFetcher,
      WarmUpLoadBalancer.DEFAULT_SEND_REQUESTS_TIMEOUT_SECONDS,
      WarmUpLoadBalancer.DEFAULT_CONCURRENT_REQUESTS);

    FutureCallback<None> callback = new FutureCallback<>();
    warmUpLoadBalancer.start(callback);
    callback.get(5000, TimeUnit.MILLISECONDS);

    Assert.assertEquals(0, requestCount.get());
  }