diff --git a/redisson/src/main/java/org/redisson/client/RedisClient.java b/redisson/src/main/java/org/redisson/client/RedisClient.java index b03c92c8e..44e9f6b37 100644 --- a/redisson/src/main/java/org/redisson/client/RedisClient.java +++ b/redisson/src/main/java/org/redisson/client/RedisClient.java @@ -186,7 +186,7 @@ public final class RedisClient { Future<InetSocketAddress> resolveFuture = resolver.resolve(InetSocketAddress.createUnresolved(uri.getHost(), uri.getPort())); resolveFuture.addListener((FutureListener<InetSocketAddress>) future -> { if (!future.isSuccess()) { - promise.completeExceptionally(future.cause()); + promise.completeExceptionally(new RedisConnectionException(future.cause())); return; } @@ -207,7 +207,7 @@ public final class RedisClient { @Override public void operationComplete(final ChannelFuture future) throws Exception { if (bootstrap.config().group().isShuttingDown()) { - IllegalStateException cause = new IllegalStateException("RedisClient is shutdown"); + RedisConnectionException cause = new RedisConnectionException("RedisClient is shutdown"); r.completeExceptionally(cause); return; } @@ -264,7 +264,7 @@ public final class RedisClient { @Override public void operationComplete(final ChannelFuture future) throws Exception { if (bootstrap.config().group().isShuttingDown()) { - IllegalStateException cause = new IllegalStateException("RedisClient is shutdown"); + RedisConnectionException cause = new RedisConnectionException("RedisClient is shutdown"); r.completeExceptionally(cause); return; } diff --git a/redisson/src/main/java/org/redisson/client/RedisConnectionException.java b/redisson/src/main/java/org/redisson/client/RedisConnectionException.java index 6c5302b88..7f582ca58 100644 --- a/redisson/src/main/java/org/redisson/client/RedisConnectionException.java +++ b/redisson/src/main/java/org/redisson/client/RedisConnectionException.java @@ -24,6 +24,10 @@ public class RedisConnectionException extends RedisException { private static final long serialVersionUID = -4756928186967834601L; + public RedisConnectionException(Throwable cause) { + super(cause); + } + public RedisConnectionException(String msg) { super(msg); } diff --git a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java index 89ccb4189..5f5d836df 100644 --- a/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java +++ b/redisson/src/main/java/org/redisson/connection/MasterSlaveConnectionManager.java @@ -339,7 +339,10 @@ public class MasterSlaveConnectionManager implements ConnectionManager { } catch (Exception e) { stopThreads(); if (e instanceof CompletionException) { - throw (RuntimeException) e.getCause(); + if (e.getCause() instanceof RuntimeException) { + throw (RuntimeException) e.getCause(); + } + throw new RedisConnectionException(e.getCause()); } throw e; } diff --git a/redisson/src/test/java/org/redisson/RedissonTest.java b/redisson/src/test/java/org/redisson/RedissonTest.java index 9e0fbb9ee..3d0ddf1d2 100644 --- a/redisson/src/test/java/org/redisson/RedissonTest.java +++ b/redisson/src/test/java/org/redisson/RedissonTest.java @@ -1140,6 +1140,19 @@ public class RedissonTest extends BaseTest { }); } + @Test + public void testMasterSlaveConnectionFail2() { + Assertions.assertThrows(RedisConnectionException.class, () -> { + Config config = new Config(); + config.useMasterSlaveServers() + .setMasterAddress("redis://gadfgdfgdsfg:1111") + .addSlaveAddress("redis://asdfasdfsdfaasdf:1111"); + Redisson.create(config); + + Thread.sleep(1500); + }); + } + @Test public void testSentinelConnectionFail() { Assertions.assertThrows(RedisConnectionException.class, () -> {