From d2eadba2a6fe174aa94309deb487ff6391674847 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Fri, 12 Apr 2013 12:11:30 -0500 Subject: [PATCH] Remove synchronization in long-running PCRS Patch by Oleg Kibirev, reviewed by brandonwilliams for CASSANDRA-5456 --- .../cassandra/service/PendingRangeCalculatorService.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java b/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java index d06f2d8501..541888ac29 100644 --- a/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java +++ b/src/java/org/apache/cassandra/service/PendingRangeCalculatorService.java @@ -38,6 +38,7 @@ import java.net.InetAddress; import java.util.HashSet; import java.util.Map; import java.util.Set; +import java.util.LinkedHashMap; import java.util.concurrent.*; @@ -153,8 +154,10 @@ public class PendingRangeCalculatorService extends PendingRangeCalculatorService // For each of the bootstrapping nodes, simply add and remove them one by one to // allLeftMetadata and check in between what their ranges would be. - synchronized (bootstrapTokens) - { + synchronized(bootstrapTokens) { + bootstrapTokens = new LinkedHashMap(bootstrapTokens); + } + for (Map.Entry entry : bootstrapTokens.entrySet()) { InetAddress endpoint = entry.getValue(); @@ -164,7 +167,6 @@ public class PendingRangeCalculatorService extends PendingRangeCalculatorService pendingRanges.put(range, endpoint); allLeftMetadata.removeEndpoint(endpoint); } - } // At this stage pendingRanges has been updated according to leaving and bootstrapping nodes. // We can now finish the calculation by checking moving nodes.