Repository: cassandra Updated Branches: refs/heads/cassandra-1.2 b55f38be3 -> 2738e8678 refs/heads/cassandra-2.0 0edd5ee98 -> 7d169211e refs/heads/cassandra-2.1 d9b463ef5 -> 25982d12c refs/heads/cassandra-2.1.0 2db047b09 -> 81f8e3705 refs/heads/trunk d2bed56b0 -> 59600625f
Clone token map outside of hot gossip loops patch by rbranson; reviewed by jbellis for CASSANDRA-7758 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/2738e867 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/2738e867 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/2738e867 Branch: refs/heads/cassandra-1.2 Commit: 2738e86783490a6bb83273281e8c4c4dcb873a3d Parents: b55f38b Author: Jonathan Ellis <jbel...@apache.org> Authored: Tue Aug 12 16:23:43 2014 -0500 Committer: Jonathan Ellis <jbel...@apache.org> Committed: Tue Aug 12 16:23:43 2014 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/service/PendingRangeCalculatorService.java | 3 ++- src/java/org/apache/cassandra/service/StorageService.java | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/2738e867/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 2c95a52..5dd3ad2 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 1.2.19 + * Clone token map outside of hot gossip loops (CASSANDRA-7758) * Add stop method to EmbeddedCassandraService (CASSANDRA-7595) * Support connecting to ipv6 jmx with nodetool (CASSANDRA-7669) * Set gc_grace_seconds to seven days for system schema tables (CASSANDRA-7668) http://git-wip-us.apache.org/repos/asf/cassandra/blob/2738e867/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java b/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java index 1c0d977..d8b7586 100644 --- a/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java +++ b/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java @@ -144,9 +144,10 @@ public class PendingRangeCalculatorService extends PendingRangeCalculatorService // for each of those ranges, find what new nodes will be responsible for the range when // all leaving nodes are gone. + TokenMetadata metadata = tm.cloneOnlyTokenMap(); // don't do this in the loop! #7758 for (Range<Token> range : affectedRanges) { - Set<InetAddress> currentEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(range.right, tm.cloneOnlyTokenMap())); + Set<InetAddress> currentEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(range.right, metadata)); Set<InetAddress> newEndpoints = ImmutableSet.copyOf(strategy.calculateNaturalEndpoints(range.right, allLeftMetadata)); pendingRanges.putAll(range, Sets.difference(newEndpoints, currentEndpoints)); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/2738e867/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 047e8d6..563b259 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -1940,8 +1940,9 @@ public class StorageService extends NotificationBroadcasterSupport implements IE Map<Range<Token>, List<InetAddress>> currentReplicaEndpoints = new HashMap<Range<Token>, List<InetAddress>>(); // Find (for each range) all nodes that store replicas for these ranges as well + TokenMetadata metadata = tokenMetadata.cloneOnlyTokenMap(); // don't do this in the loop! #7758 for (Range<Token> range : ranges) - currentReplicaEndpoints.put(range, Table.open(table).getReplicationStrategy().calculateNaturalEndpoints(range.right, tokenMetadata.cloneOnlyTokenMap())); + currentReplicaEndpoints.put(range, Table.open(table).getReplicationStrategy().calculateNaturalEndpoints(range.right, metadata)); TokenMetadata temp = tokenMetadata.cloneAfterAllLeft();