From 2d53ba14b9b734bc818f2a77bf5d61e8861ce7f5 Mon Sep 17 00:00:00 2001 From: Nikita Koksharov Date: Tue, 9 Apr 2024 10:35:44 +0300 Subject: [PATCH] testReadMasterSlave added --- redisson/pom.xml | 8 +++++ .../connection/pool/ConnectionPool.java | 1 + .../test/java/org/redisson/RedissonTest.java | 33 ++++++++++++++++--- 3 files changed, 38 insertions(+), 4 deletions(-) diff --git a/redisson/pom.xml b/redisson/pom.xml index 5b4b8022fd2..ade2f0eabc2 100644 --- a/redisson/pom.xml +++ b/redisson/pom.xml @@ -128,6 +128,14 @@ junit-jupiter-params test + + + io.github.hakky54 + logcaptor + 2.9.2 + test + + ch.qos.logback logback-classic diff --git a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java index 7eb633ea2a3..2e88365147d 100644 --- a/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java +++ b/redisson/src/main/java/org/redisson/connection/pool/ConnectionPool.java @@ -74,6 +74,7 @@ public CompletableFuture get(RedisCommand command, boolean trackChanges) { entriesCopy.removeIf(n -> n.isFreezed() || !isHealthy(n)); if (!entriesCopy.isEmpty()) { ClientConnectionsEntry entry = config.getLoadBalancer().getEntry(entriesCopy, command); + log.debug("Entry {} selected as connection source", entry); return acquireConnection(command, entry, trackChanges); } diff --git a/redisson/src/test/java/org/redisson/RedissonTest.java b/redisson/src/test/java/org/redisson/RedissonTest.java index 2f8ce7af015..786d7a1ac8e 100644 --- a/redisson/src/test/java/org/redisson/RedissonTest.java +++ b/redisson/src/test/java/org/redisson/RedissonTest.java @@ -4,6 +4,7 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.util.CharsetUtil; import net.bytebuddy.utility.RandomString; +import nl.altindag.log.LogCaptor; import org.awaitility.Awaitility; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -22,13 +23,11 @@ import org.redisson.client.protocol.Encoder; import org.redisson.codec.JsonJacksonCodec; import org.redisson.codec.SerializationCodec; -import org.redisson.config.Config; -import org.redisson.config.ConfigSupport; -import org.redisson.config.Credentials; -import org.redisson.config.CredentialsResolver; +import org.redisson.config.*; import org.redisson.connection.CRC16; import org.redisson.connection.ConnectionListener; import org.redisson.connection.MasterSlaveConnectionManager; +import org.redisson.connection.pool.SlaveConnectionPool; import org.redisson.misc.RedisURI; import org.testcontainers.containers.ContainerState; import org.testcontainers.containers.FixedHostPortGenericContainer; @@ -670,6 +669,32 @@ public void testEvalCache() { }); } + @Test + public void testReadMasterSlave() { + testInCluster(rc -> { + Config c = rc.getConfig(); + c.useClusterServers().setReadMode(ReadMode.MASTER_SLAVE); + + LogCaptor logCaptor = LogCaptor.forClass(SlaveConnectionPool.class); + logCaptor.setLogLevelToDebug(); + + RedissonClient rr = Redisson.create(c); + + for (int i = 0; i < 100; i++) { + rr.getBucket("" + i).get(); + } + + long slaveConnections = logCaptor.getDebugLogs().stream().filter(s -> s.contains("nodeType=SLAVE")).count(); + long masterConnections = logCaptor.getDebugLogs().stream().filter(s -> s.contains("nodeType=MASTER")).count(); + + assertThat(masterConnections).isEqualTo(50); + assertThat(slaveConnections).isEqualTo(50); + + logCaptor.close(); + rr.shutdown(); + }); + } + @Test public void testMovedRedirectInCluster() { withNewCluster((nodes, redissonClient) -> {