Fixed - zero timeout isn't respected in RRateLimiter.tryAcquire method. #2149

pull/2152/head
Nikita Koksharov 6 years ago
parent 2dc424c665
commit be46b91482

@ -126,7 +126,7 @@ public class RedissonRateLimiter extends RedissonObject implements RRateLimiter
public RFuture<Boolean> tryAcquireAsync(long permits, long timeout, TimeUnit unit) {
RPromise<Boolean> promise = new RedissonPromise<Boolean>();
long timeoutInMillis = -1;
if (timeout > 0) {
if (timeout >= 0) {
timeoutInMillis = unit.toMillis(timeout);
}
tryAcquireAsync(permits, promise, timeoutInMillis);

@ -37,6 +37,39 @@ public class RedissonRateLimiterTest extends BaseTest {
Assertions.assertThatThrownBy(() -> limiter.tryAcquire(20)).hasMessageContaining("Requested permits amount could not exceed defined rate");
assertThat(limiter.tryAcquire()).isTrue();
}
@Test
public void testZeroTimeout() throws InterruptedException {
RRateLimiter limiter = redisson.getRateLimiter("myLimiter");
limiter.trySetRate(RateType.OVERALL, 5, 1, RateIntervalUnit.SECONDS);
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
Thread.sleep(1000);
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isTrue();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
assertThat(limiter.tryAcquire(1, 0, TimeUnit.SECONDS)).isFalse();
}
@Test(timeout = 1500)
public void testTryAcquire() {

Loading…
Cancel
Save