diff --git a/src/main/java/redis/clients/jedis/ClusterPipeline.java b/src/main/java/redis/clients/jedis/ClusterPipeline.java index a122b41688..0a51f5dec6 100644 --- a/src/main/java/redis/clients/jedis/ClusterPipeline.java +++ b/src/main/java/redis/clients/jedis/ClusterPipeline.java @@ -72,6 +72,11 @@ protected Connection getConnection(HostAndPort nodeKey) { return provider.getConnection(nodeKey); } + @Override + protected void refreshConnection() { + provider.renewSlotCache(); + } + public Response spublish(String channel, String message) { return appendCommand(commandObjects.spublish(channel, message)); } diff --git a/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java b/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java index 13f2730ab4..2c065fc6e1 100644 --- a/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java +++ b/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java @@ -14,6 +14,7 @@ import org.slf4j.LoggerFactory; import redis.clients.jedis.exceptions.JedisConnectionException; +import redis.clients.jedis.exceptions.JedisMovedDataException; import redis.clients.jedis.graph.GraphCommandObjects; import redis.clients.jedis.providers.ConnectionProvider; import redis.clients.jedis.util.IOUtils; @@ -53,6 +54,8 @@ protected final void prepareGraphCommands(ConnectionProvider connectionProvider) protected abstract Connection getConnection(HostAndPort nodeKey); + protected abstract void refreshConnection(); + @Override protected final Response appendCommand(CommandObject commandObject) { HostAndPort nodeKey = getNodeKey(commandObject.getArguments()); @@ -111,6 +114,9 @@ public final void sync() { try { List unformatted = connection.getMany(queue.size()); for (Object o : unformatted) { + if (o instanceof JedisMovedDataException) { + refreshConnection(); + } queue.poll().set(o); } } catch (JedisConnectionException jce) { diff --git a/src/main/java/redis/clients/jedis/ShardedPipeline.java b/src/main/java/redis/clients/jedis/ShardedPipeline.java index 8ad89cc59e..cedf17ee36 100644 --- a/src/main/java/redis/clients/jedis/ShardedPipeline.java +++ b/src/main/java/redis/clients/jedis/ShardedPipeline.java @@ -58,6 +58,11 @@ protected Connection getConnection(HostAndPort nodeKey) { return provider.getConnection(nodeKey); } + @Override + protected void refreshConnection() { + // do nothing + } + /** * This method must be called after constructor, if graph commands are going to be used. */