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;
}