diff --git a/src/main/java/redis/clients/jedis/JedisSentinelPool.java b/src/main/java/redis/clients/jedis/JedisSentinelPool.java index 84afe80..b3e6abd 100644 --- a/src/main/java/redis/clients/jedis/JedisSentinelPool.java +++ b/src/main/java/redis/clients/jedis/JedisSentinelPool.java @@ -130,8 +130,15 @@ public class JedisSentinelPool extends Pool { jedis = new Jedis(hap.getHost(), hap.getPort()); if (master == null) { - master = toHostAndPort(jedis - .sentinelGetMasterAddrByName(masterName)); + List masterAddr = jedis + .sentinelGetMasterAddrByName(masterName); + if (masterAddr == null || masterAddr.size() != 2) { + log.warning("Can not get master addr, master name: " + + masterName + ". Sentinel: " + hap + "."); + continue; + } + + master = toHostAndPort(masterAddr); log.fine("Found Redis master at " + master); break outer; } @@ -140,7 +147,7 @@ public class JedisSentinelPool extends Pool { + ". Trying next one."); } finally { if (jedis != null) { - jedis.close(); + jedis.close(); } } } @@ -331,4 +338,4 @@ public class JedisSentinelPool extends Pool { } } } -} +} \ No newline at end of file diff --git a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java index 0308d0a..1fac249 100644 --- a/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java +++ b/src/test/java/redis/clients/jedis/tests/JedisSentinelPoolTest.java @@ -2,6 +2,7 @@ package redis.clients.jedis.tests; import java.util.HashSet; import java.util.Set; +import java.util.concurrent.TimeUnit; import org.apache.commons.pool2.impl.GenericObjectPoolConfig; import org.junit.Before; @@ -41,6 +42,30 @@ public class JedisSentinelPoolTest extends JedisTestBase { sentinelJedis2 = new Jedis(sentinel2.getHost(), sentinel2.getPort()); } + @Test + public void errorMasterNameNotThrowException() throws InterruptedException { + final String wrongMasterName = "wrongMasterName"; + new Thread(new Runnable() { + @Override + public void run() { + try { + TimeUnit.SECONDS.sleep(3); + sentinelJedis1.sentinelMonitor(wrongMasterName, + "127.0.0.1", master.getPort(), 2); + } catch (InterruptedException e) { + e.printStackTrace(); + } + + } + }).start(); + + JedisSentinelPool pool = new JedisSentinelPool(wrongMasterName, + sentinels); + pool.destroy(); + sentinelJedis1.sentinelRemove(wrongMasterName); + } + + @Test public void checkCloseableConnections() throws Exception { GenericObjectPoolConfig config = new GenericObjectPoolConfig(); @@ -197,4 +222,4 @@ public class JedisSentinelPoolTest extends JedisTestBase { } } -} +} \ No newline at end of file