From edd644ccba0dfdc564fa3488a4c5f8e6016169ac Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Mon, 7 Nov 2022 12:59:34 +0300 Subject: [PATCH] Fixed - RedissonBlockingQueue should return null if negative timeout defined. #4652 --- .../java/org/redisson/RedissonBlockingQueue.java | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/redisson/src/main/java/org/redisson/RedissonBlockingQueue.java b/redisson/src/main/java/org/redisson/RedissonBlockingQueue.java index 8f001c877..d2d5f2a40 100644 --- a/redisson/src/main/java/org/redisson/RedissonBlockingQueue.java +++ b/redisson/src/main/java/org/redisson/RedissonBlockingQueue.java @@ -23,6 +23,7 @@ import org.redisson.client.protocol.RedisCommand; import org.redisson.client.protocol.RedisCommands; import org.redisson.command.CommandAsyncExecutor; import org.redisson.connection.decoder.ListDrainToDecoder; +import org.redisson.misc.CompletableFutureWrapper; import java.time.Duration; import java.util.*; @@ -89,6 +90,9 @@ public class RedissonBlockingQueue extends RedissonQueue implements RBlock @Override public RFuture pollAsync(long timeout, TimeUnit unit) { + if (timeout < 0) { + return new CompletableFutureWrapper<>((V) null); + } return commandExecutor.writeAsync(getRawName(), codec, RedisCommands.BLPOP_VALUE, getRawName(), toSeconds(timeout, unit)); } @@ -116,6 +120,10 @@ public class RedissonBlockingQueue extends RedissonQueue implements RBlock */ @Override public RFuture pollFromAnyAsync(long timeout, TimeUnit unit, String... queueNames) { + if (timeout < 0) { + return new CompletableFutureWrapper<>((V) null); + } + return commandExecutor.pollFromAnyAsync(getRawName(), codec, RedisCommands.BLPOP_VALUE, toSeconds(timeout, unit), queueNames); } @@ -160,6 +168,10 @@ public class RedissonBlockingQueue extends RedissonQueue implements RBlock @Override public RFuture pollLastAndOfferFirstToAsync(String queueName, long timeout, TimeUnit unit) { + if (timeout < 0) { + return new CompletableFutureWrapper<>((V) null); + } + String mappedName = commandExecutor.getConnectionManager().getConfig().getNameMapper().map(queueName); return commandExecutor.writeAsync(getRawName(), codec, RedisCommands.BRPOPLPUSH, getRawName(), mappedName, toSeconds(timeout, unit)); }