diff --git a/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java b/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java index d5f8d7318..6e3ad573e 100644 --- a/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java +++ b/redisson/src/main/java/org/redisson/cluster/ClusterConnectionManager.java @@ -754,12 +754,18 @@ public class ClusterConnectionManager extends MasterSlaveConnectionManager { Collection clusterLastPartitions = getLastPartitions(); // https://github.com/redisson/redisson/issues/3635 - Map nodeEntries = clusterLastPartitions.stream().collect(Collectors.toMap(p -> p.getNodeId(), + Map nodeEntries = clusterLastPartitions.stream() + .filter(e -> getEntry(e.getSlotRanges().iterator().next().getStartSlot()) != null) + .collect(Collectors.toMap(p -> p.getNodeId(), p -> getEntry(p.getSlotRanges().iterator().next().getStartSlot()))); Set changedSlots = new HashSet<>(); for (ClusterPartition currentPartition : clusterLastPartitions) { String nodeId = currentPartition.getNodeId(); + if (!nodeEntries.containsKey(nodeId)) { + continue; + } + for (ClusterPartition newPartition : newPartitions) { if (!Objects.equals(nodeId, newPartition.getNodeId()) || newPartition.getSlotRanges().equals(currentPartition.getSlotRanges())) {