From 64ee853db3d4d79e163f2bd0d7aa6b86b4eee525 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Tue, 8 Sep 2020 08:39:48 +0300 Subject: [PATCH] Fixed - RSemaphore.addPermits() method doesn't work #3038 --- .../java/org/redisson/RedissonSemaphore.java | 8 +++++--- .../org/redisson/RedissonSemaphoreTest.java | 17 ++++++++++++++++- 2 files changed, 21 insertions(+), 4 deletions(-) diff --git a/redisson/src/main/java/org/redisson/RedissonSemaphore.java b/redisson/src/main/java/org/redisson/RedissonSemaphore.java index 819b5152c..e76fe4c3c 100644 --- a/redisson/src/main/java/org/redisson/RedissonSemaphore.java +++ b/redisson/src/main/java/org/redisson/RedissonSemaphore.java @@ -491,16 +491,18 @@ public class RedissonSemaphore extends RedissonExpirable implements RSemaphore { public void reducePermits(int permits) { get(reducePermitsAsync(permits)); } - + @Override public RFuture reducePermitsAsync(int permits) { return addPermitsAsync(-permits); } - + + @Override public void addPermits(int permits) { - get(reducePermitsAsync(permits)); + get(addPermitsAsync(permits)); } + @Override public RFuture addPermitsAsync(int permits) { return commandExecutor.evalWriteAsync(getName(), LongCodec.INSTANCE, RedisCommands.EVAL_VOID, "local value = redis.call('get', KEYS[1]); " + diff --git a/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java b/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java index 1c1ade8f5..b9eeea844 100644 --- a/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSemaphoreTest.java @@ -34,7 +34,22 @@ public class RedissonSemaphoreTest extends BaseConcurrentTest { assertThat(s.trySetPermits(15)).isFalse(); assertThat(s.availablePermits()).isEqualTo(10); } - + + @Test + public void testAddPermits() throws InterruptedException { + RSemaphore s = redisson.getSemaphore("test"); + s.trySetPermits(10); + + s.acquire(10); + assertThat(s.availablePermits()).isEqualTo(0); + s.addPermits(4); + assertThat(s.availablePermits()).isEqualTo(4); + s.release(10); + assertThat(s.availablePermits()).isEqualTo(14); + s.acquire(5); + assertThat(s.availablePermits()).isEqualTo(9); + } + @Test public void testReducePermits() throws InterruptedException { RSemaphore s = redisson.getSemaphore("test");