public void sendRequests(Callback<None> callback)
  {
    LOG.info("Event Bus Requests throttler started for {} keys at a {} load rate",
      _keysToFetch.size(), _maxConcurrentRequests);
    if (_keysToFetch.size() == 0)
    {
      callback.onSuccess(None.none());
      return;
    }
    _callback = callback;
    makeRequests(_maxConcurrentRequests);
  }
@Test(timeOut = 10000)
  public void testThrottlingUnlimitedRequests() throws InterruptedException, ExecutionException, TimeoutException
  {
    TestSubscriber testSubscriber = new TestSubscriber();
    TestEventBus testZkEventBus = new TestEventBus(testSubscriber, 50);

    final int nRequests = 100;

    int concurrentRequestsHugeNumber = 999999999;
    int concurrentRequestsCheckHigher = PropertyEventBusRequestsThrottler.DEFAULT_MAX_CONCURRENT_REQUESTS;

    PropertyEventBusRequestsThrottler<String> propertyEventBusRequestsThrottler =
      new PropertyEventBusRequestsThrottler<>(testZkEventBus, testSubscriber, generateNKeys(nRequests),
        concurrentRequestsHugeNumber, false);

    FutureCallback<None> callback = new FutureCallback<>();
    propertyEventBusRequestsThrottler.sendRequests(callback);

    boolean triggeredAtLeastOnce = false;
    while (!callback.isDone() && !triggeredAtLeastOnce)
    {
      int currentConcurrentRequests =
        testZkEventBus.getRequestCount().get() - testSubscriber.getCompletedRequestCount().get();
      if (currentConcurrentRequests > concurrentRequestsCheckHigher)
      {
        triggeredAtLeastOnce = true;
      }
      Thread.sleep(50);
    }

    callback.get(1000, TimeUnit.MILLISECONDS);

    Assert.assertTrue(triggeredAtLeastOnce);
    Assert.assertEquals(nRequests, testZkEventBus.getRequestCount().get());
    Assert.assertEquals(nRequests, testSubscriber.getCompletedRequestCount().get());
  }