From bb36cd09c164840ad9ab3231f1039c443f8f040c Mon Sep 17 00:00:00 2001 From: Aleksandr Sorokoumov Date: Thu, 26 Mar 2020 17:02:47 +0100 Subject: [PATCH] CASSANDRA-14801 Mark as pending only missing part of the token range --- src/java/org/apache/cassandra/locator/TokenMetadata.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/java/org/apache/cassandra/locator/TokenMetadata.java b/src/java/org/apache/cassandra/locator/TokenMetadata.java index f1d0f9bb8ab9..1a1bef2f2b3d 100644 --- a/src/java/org/apache/cassandra/locator/TokenMetadata.java +++ b/src/java/org/apache/cassandra/locator/TokenMetadata.java @@ -895,11 +895,13 @@ private static PendingRangeMaps calculatePendingRanges(AbstractReplicationStrate { EndpointsForRange currentReplicas = strategy.calculateNaturalReplicas(range.right, metadata); EndpointsForRange newReplicas = strategy.calculateNaturalReplicas(range.right, allLeftMetadata); - for (Replica replica : newReplicas) + for (Replica newReplica : newReplicas) { - if (currentReplicas.endpoints().contains(replica.endpoint())) + if (currentReplicas.endpoints().contains(newReplica.endpoint())) continue; - newPendingRanges.addPendingRange(range, replica); + + for (Replica pendingReplica : newReplica.subtractSameReplication(addressRanges.get(newReplica.endpoint()))) + newPendingRanges.addPendingRange(range, pendingReplica); } }