Permit doAcquire()

in uforwarder/src/main/java/com/uber/data/kafka/consumerproxy/worker/limiter/AdaptiveInflightLimiter.java [37:64]


  Permit doAcquire(AcquireMode acquireMode) throws InterruptedException {
    if (!isClosed.get()) {
      synchronized (lock) {
        queueLength.incrementAndGet();
        try {
          while (!isClosed.get()) {
            Optional<Limiter.Listener> listener = tryAcquireImpl();
            if (listener.isPresent()) {
              return new AdaptivePermit(listener.get());
            } else if (acquireMode == AcquireMode.DryRun) {
              return NoopPermit.INSTANCE;
            } else if (acquireMode == AcquireMode.NonBlocking) {
              // unblock caller if failed to get permit
              return null;
            }

            // if not get permitted, wait for the unlock signal and try acquire permit again.
            lock.wait();
          }
        } finally {
          queueLength.decrementAndGet();
        }
      }
    }

    // Always permit if limiter is closed
    return NoopPermit.INSTANCE;
  }