diff --git a/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java b/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java index dfada93da0..8f9f90fae9 100644 --- a/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java +++ b/src/main/java/redis/clients/jedis/MultiNodePipelineBase.java @@ -73,10 +73,16 @@ protected final Response appendCommand(CommandObject commandObject) { queue = pipelinedResponses.get(nodeKey); connection = connections.get(nodeKey); } else { - queue = new LinkedList<>(); - connection = getConnection(nodeKey); - pipelinedResponses.put(nodeKey, queue); - connections.put(nodeKey, connection); + pipelinedResponses.putIfAbsent(nodeKey, new LinkedList<>()); + queue = pipelinedResponses.get(nodeKey); + + Connection newOne = getConnection(nodeKey); + connections.putIfAbsent(nodeKey, newOne); + connection = connections.get(nodeKey); + if (connection != newOne) { + log.debug("Duplicate connection to {}, closing it.", nodeKey); + IOUtils.closeQuietly(newOne); + } } connection.sendCommand(commandObject.getArguments()); @@ -1005,7 +1011,7 @@ public Response zscore(String key, String member) { } @Override - public Response> zmscore(String key, String... members) { + public Response> zmscore(String key, String... members) { return appendCommand(commandObjects.zmscore(key, members)); }