From 964c55959aa784c8f951e32ab8ef194235b22b65 Mon Sep 17 00:00:00 2001 From: Ajith Kumar Date: Mon, 20 Apr 2020 20:30:53 +0530 Subject: [PATCH] DATAREDIS-1127 - Handling ping failures for getSentinelConnection method. Original Pull Request: #524 --- .../connection/jedis/JedisConnectionFactory.java | 11 ++++++++--- ...edisConnectionFactorySentinelIntegrationTests.java | 11 +++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java index ddd826acd..d65f8ca09 100644 --- a/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java +++ b/src/main/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactory.java @@ -75,6 +75,7 @@ import org.springframework.util.CollectionUtils; * @author Christoph Strobl * @author Mark Paluch * @author Fu Jian + * @author Ajith Kumar * @see JedisClientConfiguration * @see Jedis */ @@ -855,10 +856,14 @@ public class JedisConnectionFactory implements InitializingBean, DisposableBean, Jedis jedis = new Jedis(node.getHost(), node.getPort(), getConnectTimeout(), getReadTimeout()); - if (jedis.ping().equalsIgnoreCase("pong")) { + try { + if (jedis.ping().equalsIgnoreCase("pong")) { - potentiallySetClientName(jedis); - return jedis; + potentiallySetClientName(jedis); + return jedis; + } + } catch (Exception ex) { + log.warn(String.format("Ping failed for sentinel host:%s", node.getHost()), ex); } } diff --git a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java index 48c020fdc..612d0af2e 100644 --- a/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java +++ b/src/test/java/org/springframework/data/redis/connection/jedis/JedisConnectionFactorySentinelIntegrationTests.java @@ -31,6 +31,7 @@ import org.springframework.data.redis.test.util.RedisSentinelRule; * @author Christoph Strobl * @author Fu Jian * @author Mark Paluch + * @author Ajith Kumar */ public class JedisConnectionFactorySentinelIntegrationTests { @@ -82,4 +83,14 @@ public class JedisConnectionFactorySentinelIntegrationTests { assertThat(factory.getConnection().getClientName()).isEqualTo("clientName"); } + + @Test + public void shouldNotFailOnFirstSentinelDown() { + + final RedisSentinelConfiguration multiSentinelConfig = new RedisSentinelConfiguration() + .master("mymaster").sentinel("any.unavailable.host",26379).sentinel("127.0.0.1", 26379); + + factory = new JedisConnectionFactory(multiSentinelConfig); + assertThat(factory.getSentinelConnection().isOpen()).isTrue(); + } }