From 70a895566e6bb00ed5c1109abe0ef4094847cebc Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Thu, 15 Sep 2022 17:42:13 +0300 Subject: [PATCH] Fixed - RBatchReactive execution stuck forever if useScriptCache = true #4538 --- .../reactive/CommandReactiveBatchService.java | 5 +++ .../RedissonSetCacheReactiveTest.java | 33 ++++++++++++++++++- 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/redisson/src/main/java/org/redisson/reactive/CommandReactiveBatchService.java b/redisson/src/main/java/org/redisson/reactive/CommandReactiveBatchService.java index dd71e9d26..92634fcaa 100644 --- a/redisson/src/main/java/org/redisson/reactive/CommandReactiveBatchService.java +++ b/redisson/src/main/java/org/redisson/reactive/CommandReactiveBatchService.java @@ -78,6 +78,11 @@ public class CommandReactiveBatchService extends CommandReactiveService { return batchService.executeAsync(); } + @Override + protected boolean isEvalCacheActive() { + return false; + } + public RFuture discardAsync() { return batchService.discardAsync(); } diff --git a/redisson/src/test/java/org/redisson/RedissonSetCacheReactiveTest.java b/redisson/src/test/java/org/redisson/RedissonSetCacheReactiveTest.java index 704d07522..7869a4986 100644 --- a/redisson/src/test/java/org/redisson/RedissonSetCacheReactiveTest.java +++ b/redisson/src/test/java/org/redisson/RedissonSetCacheReactiveTest.java @@ -8,12 +8,16 @@ import java.util.Collections; import java.util.HashSet; import java.util.Iterator; import java.util.Set; +import java.util.concurrent.CompletableFuture; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; -import org.redisson.api.RSetCacheReactive; +import org.redisson.api.*; +import org.redisson.client.codec.StringCodec; +import org.redisson.config.Config; +import reactor.core.publisher.Mono; public class RedissonSetCacheReactiveTest extends BaseReactiveTest { @@ -31,6 +35,33 @@ public class RedissonSetCacheReactiveTest extends BaseReactiveTest { } + @Test + public void testBatchScriptCache() throws InterruptedException { + Config config = new Config(); + config.setUseScriptCache(true); + config.useSingleServer() + .setAddress(RedisRunner.getDefaultRedisServerBindAddressAndPort()); + RedissonReactiveClient client = Redisson.create(config).reactive(); + + RBatchReactive batch = client.createBatch(); + Mono setResult = batch.getSetCache("test2", + StringCodec.INSTANCE) + .add("setValue", 10, TimeUnit.SECONDS); + + Thread.sleep(400); + + Mono monoMsSetSize = batch.getSetCache("test2", + StringCodec.INSTANCE).size(); + batch.execute().subscribe(); + Integer v = Mono.zip(setResult, monoMsSetSize).flatMap(touple -> { + return Mono.just(touple.getT2()); + }).block(); + + assertThat(v).isEqualTo(1); + + client.shutdown(); + } + @Test public void testAddBean() throws InterruptedException, ExecutionException { SimpleBean sb = new SimpleBean();