1
0

[HUDI-4055]refactor ratelimiter to avoid stack overflow (#5530)

This commit is contained in:
guanziyue
2022-05-09 10:27:37 +08:00
committed by GitHub
parent 569a76a9a5
commit 75eaa0bffe

View File

@@ -53,19 +53,22 @@ public class RateLimiter {
} }
public boolean tryAcquire(int numPermits) { public boolean tryAcquire(int numPermits) {
if (numPermits > maxPermits) { int remainingPermits = numPermits;
while (remainingPermits > 0) {
if (remainingPermits > maxPermits) {
acquire(maxPermits); acquire(maxPermits);
return tryAcquire(numPermits - maxPermits); remainingPermits -= maxPermits;
} else { } else {
return acquire(numPermits); return acquire(remainingPermits);
} }
} }
return true;
}
public boolean acquire(int numOps) { public boolean acquire(int numOps) {
try { try {
if (!semaphore.tryAcquire(numOps)) { while (!semaphore.tryAcquire(numOps)) {
Thread.sleep(WAIT_BEFORE_NEXT_ACQUIRE_PERMIT_IN_MS); Thread.sleep(WAIT_BEFORE_NEXT_ACQUIRE_PERMIT_IN_MS);
return acquire(numOps);
} }
LOG.debug(String.format("acquire permits: %s, maxPremits: %s", numOps, maxPermits)); LOG.debug(String.format("acquire permits: %s, maxPremits: %s", numOps, maxPermits));
} catch (InterruptedException e) { } catch (InterruptedException e) {