From 7015d31aa859ac03c62cfcbbc12c7b186d430dc4 Mon Sep 17 00:00:00 2001 From: Nikita Date: Thu, 4 Oct 2018 13:33:21 +0300 Subject: [PATCH] Fixed - RRateLimiter.tryAcquire with timeout blocks forever #1659 --- .../main/java/org/redisson/RedissonRateLimiter.java | 4 ++-- .../java/org/redisson/RedissonRateLimiterTest.java | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java index 992bd175e..60bd753c6 100644 --- a/redisson/src/main/java/org/redisson/RedissonRateLimiter.java +++ b/redisson/src/main/java/org/redisson/RedissonRateLimiter.java @@ -169,7 +169,7 @@ public class RedissonRateLimiter extends RedissonObject implements RRateLimiter public void run() { promise.trySuccess(false); } - }, remains, TimeUnit.SECONDS); + }, remains, TimeUnit.MILLISECONDS); } else { final long start = System.currentTimeMillis(); commandExecutor.getConnectionManager().getGroup().schedule(new Runnable() { @@ -183,7 +183,7 @@ public class RedissonRateLimiter extends RedissonObject implements RRateLimiter tryAcquireAsync(permits, promise, remains - elapsed); } - }, delay, TimeUnit.SECONDS); + }, delay, TimeUnit.MILLISECONDS); } } }); diff --git a/redisson/src/test/java/org/redisson/RedissonRateLimiterTest.java b/redisson/src/test/java/org/redisson/RedissonRateLimiterTest.java index 441c4c0ed..993e2be66 100644 --- a/redisson/src/test/java/org/redisson/RedissonRateLimiterTest.java +++ b/redisson/src/test/java/org/redisson/RedissonRateLimiterTest.java @@ -17,6 +17,16 @@ import org.redisson.api.RateType; public class RedissonRateLimiterTest extends BaseTest { + @Test(timeout = 1500) + public void testTryAcquire() { + RRateLimiter rr = redisson.getRateLimiter("acquire"); + assertThat(rr.trySetRate(RateType.OVERALL, 1, 5, RateIntervalUnit.SECONDS)).isTrue(); + + assertThat(rr.tryAcquire(1, 1, TimeUnit.SECONDS)).isTrue(); + assertThat(rr.tryAcquire(1, 1, TimeUnit.SECONDS)).isFalse(); + assertThat(rr.tryAcquire()).isFalse(); + } + @Test public void testAcquire() { RRateLimiter rr = redisson.getRateLimiter("acquire");