提交 cee7e5a7 编写于 作者: N Nikita Koksharov

Fixed - RRateLimiter.availablePermits() method throws exception (regression since 3.13.3). #3025

上级 a08d09b0
......@@ -245,7 +245,7 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
@Override
public void setRate(RateType type, long rate, long rateInterval, RateIntervalUnit unit) {
setRateAsync(type, rate, rateInterval, unit);
get(setRateAsync(type, rate, rateInterval, unit));
}
@Override
......@@ -319,7 +319,7 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
+ "local expiredValues = redis.call('zrangebyscore', permitsName, 0, tonumber(ARGV[1]) - interval); "
+ "local released = 0; "
+ "for i, v in ipairs(expiredValues) do "
+ "local random, permits = struct.unpack('dI', v);"
+ "local random, permits = struct.unpack('fI', v);"
+ "released = released + permits;"
+ "end; "
......
......@@ -57,6 +57,19 @@ public class RedissonRateLimiterTest extends BaseTest {
assertThat(rr.getConfig().getRateType()).isEqualTo(RateType.OVERALL);
}
@Test
public void testAvailablePermits() throws InterruptedException {
RRateLimiter rt = redisson.getRateLimiter("rt2");
rt.trySetRate(RateType.OVERALL, 10, 5, RateIntervalUnit.SECONDS);
assertThat(rt.availablePermits()).isEqualTo(10);
rt.acquire(1);
Thread.sleep(6000);
assertThat(rt.availablePermits()).isEqualTo(10);
}
@Test
public void testUpdateRateConfig() {
RRateLimiter rr = redisson.getRateLimiter("acquire");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册