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

pull/3048/head
Nikita Koksharov 5 years ago
parent a08d09b0ee
commit cee7e5a796

@ -245,7 +245,7 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
@Override @Override
public void setRate(RateType type, long rate, long rateInterval, RateIntervalUnit unit) { public void setRate(RateType type, long rate, long rateInterval, RateIntervalUnit unit) {
setRateAsync(type, rate, rateInterval, unit); get(setRateAsync(type, rate, rateInterval, unit));
} }
@Override @Override
@ -319,7 +319,7 @@ public class RedissonRateLimiter extends RedissonExpirable implements RRateLimit
+ "local expiredValues = redis.call('zrangebyscore', permitsName, 0, tonumber(ARGV[1]) - interval); " + "local expiredValues = redis.call('zrangebyscore', permitsName, 0, tonumber(ARGV[1]) - interval); "
+ "local released = 0; " + "local released = 0; "
+ "for i, v in ipairs(expiredValues) do " + "for i, v in ipairs(expiredValues) do "
+ "local random, permits = struct.unpack('dI', v);" + "local random, permits = struct.unpack('fI', v);"
+ "released = released + permits;" + "released = released + permits;"
+ "end; " + "end; "

@ -57,6 +57,19 @@ public class RedissonRateLimiterTest extends BaseTest {
assertThat(rr.getConfig().getRateType()).isEqualTo(RateType.OVERALL); 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 @Test
public void testUpdateRateConfig() { public void testUpdateRateConfig() {
RRateLimiter rr = redisson.getRateLimiter("acquire"); RRateLimiter rr = redisson.getRateLimiter("acquire");

Loading…
Cancel
Save