diff --git a/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java b/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java index 39203ac47..7d25c479c 100644 --- a/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java +++ b/redisson/src/main/java/org/redisson/RedissonPermitExpirableSemaphore.java @@ -736,12 +736,10 @@ public class RedissonPermitExpirableSemaphore extends RedissonExpirable implemen throw new CompletionException(e); } -// if (res == permitsIds.size()) { -// return null; -// } - if (res != 0) { + if (res == permitsIds.size()) { return null; } + throw new CompletionException(new IllegalArgumentException("Permits with ids " + permitsIds + " have already been released or don't exist")); }); return new CompletableFutureWrapper<>(f); diff --git a/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java b/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java index e0f08c9a5..18ec8e6de 100644 --- a/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java +++ b/redisson/src/test/java/org/redisson/RedissonPermitExpirableSemaphoreTest.java @@ -556,11 +556,12 @@ public class RedissonPermitExpirableSemaphoreTest extends BaseConcurrentTest { } @Test - public void testReleaseManyWithout() throws InterruptedException { + public void testReleaseManyNotExistOrExpired() throws InterruptedException { RPermitExpirableSemaphore s = redisson.getPermitExpirableSemaphore("test"); s.trySetPermits(10); - List timedPermitsIds = s.acquire(2,100, TimeUnit.MILLISECONDS); + List timedPermitsIds = s.acquire(2, 100, TimeUnit.MILLISECONDS); List permitsIds = s.tryAcquire(8); + List permitsIdsFirstPart = permitsIds.subList(0, 2); int released = s.tryRelease(permitsIdsFirstPart); @@ -572,12 +573,10 @@ public class RedissonPermitExpirableSemaphoreTest extends BaseConcurrentTest { Assertions.assertThrows(RedisException.class, () -> s.release(timedPermitsIds)); assertThat(s.availablePermits()).isEqualTo(4); - List permitsIdsThirdPart = permitsIds.subList(4, 6); - permitsIdsThirdPart.addAll(permitsIdsFirstPart); - Assertions.assertThrows(RedisException.class, () -> s.release(permitsIdsThirdPart)); + List permitsIdsSecondPart = permitsIds.subList(2, 4); + permitsIdsSecondPart.addAll(permitsIdsFirstPart); + Assertions.assertThrows(RedisException.class, () -> s.release(permitsIdsSecondPart)); assertThat(s.availablePermits()).isEqualTo(4); - - } @Test