From 2d04af6a99eaf96bd864ce5896e21347bc3df679 Mon Sep 17 00:00:00 2001 From: "andrea.como" Date: Fri, 8 May 2020 00:16:16 +0200 Subject: [PATCH] DATAREDIS-1142 - Use Lettuce reactive cluster connection if configured. Original Pull Request: #529 --- .../lettuce/LettuceConnectionFactory.java | 5 +++++ .../LettuceConnectionFactoryUnitTests.java | 22 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java index e39df82a8..7741edc4b 100644 --- a/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactory.java @@ -90,6 +90,7 @@ import org.springframework.util.ClassUtils; * @author Balázs Németh * @author Ruben Cervilla * @author Luis De Bello + * @author Andrea Como */ public class LettuceConnectionFactory implements InitializingBean, DisposableBean, RedisConnectionFactory, ReactiveRedisConnectionFactory { @@ -432,6 +433,10 @@ public class LettuceConnectionFactory @Override public LettuceReactiveRedisConnection getReactiveConnection() { + if (isClusterAware()) { + return getReactiveClusterConnection(); + } + return getShareNativeConnection() ? new LettuceReactiveRedisConnection(getSharedReactiveConnection(), reactiveConnectionProvider) : new LettuceReactiveRedisConnection(reactiveConnectionProvider); diff --git a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java index 0763597a8..3d6858744 100644 --- a/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java +++ b/src/test/java/org/springframework/data/redis/connection/lettuce/LettuceConnectionFactoryUnitTests.java @@ -67,6 +67,7 @@ import org.springframework.test.util.ReflectionTestUtils; * @author Balázs Németh * @author Ruben Cervilla * @author Luis De Bello + * @author Andrea Como */ public class LettuceConnectionFactoryUnitTests { @@ -942,6 +943,27 @@ public class LettuceConnectionFactoryUnitTests { assertThat(options.getTimeoutOptions().isApplyConnectionTimeout()).isFalse(); } + @Test // DATAREDIS-1142 + public void shouldFallbackToReactiveRedisClusterConnectionWhenGetReactiveConnectionWithClusterConfig() { + + LettuceConnectionProvider connectionProviderMock = mock(LettuceConnectionProvider.class); + StatefulConnection statefulConnection = mock(StatefulConnection.class); + when(connectionProviderMock.getConnection(any())).thenReturn(statefulConnection); + LettuceConnectionFactory connectionFactory = new LettuceConnectionFactory(clusterConfig) { + + @Override + protected LettuceConnectionProvider doCreateConnectionProvider(AbstractRedisClient client, + RedisCodec codec) { + return connectionProviderMock; + } + }; + connectionFactory.afterPropertiesSet(); + + LettuceReactiveRedisConnection reactiveConnection = connectionFactory.getReactiveConnection(); + + assertThat(reactiveConnection).isInstanceOf(LettuceReactiveRedisClusterConnection.class); + } + @Data @AllArgsConstructor static class CustomRedisConfiguration implements RedisConfiguration, WithHostAndPort {