Author: brandonwilliams Date: Tue Dec 28 21:43:45 2010 New Revision: 1053450
URL: http://svn.apache.org/viewvc?rev=1053450&view=rev Log: Avoid synchronization in getPendingRanges and unecessarily calling it twice. Patch by brandonwilliams, reviewed by jbellis for CASSANDRA-1370 Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java Modified: cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java?rev=1053450&r1=1053449&r2=1053450&view=diff ============================================================================== --- cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java (original) +++ cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/locator/TokenMetadata.java Tue Dec 28 21:43:45 2010 @@ -323,13 +323,15 @@ public class TokenMetadata } } - private synchronized Multimap<Range, InetAddress> getPendingRangesMM(String table) + private Multimap<Range, InetAddress> getPendingRangesMM(String table) { Multimap<Range, InetAddress> map = pendingRanges.get(table); if (map == null) { - map = HashMultimap.create(); - pendingRanges.put(table, map); + map = HashMultimap.create(); + Multimap<Range, InetAddress> priorMap = pendingRanges.putIfAbsent(table, map); + if (priorMap != null) + map = priorMap; } return map; } @@ -556,12 +558,13 @@ public class TokenMetadata */ public Collection<InetAddress> getWriteEndpoints(Token token, String table, Collection<InetAddress> naturalEndpoints) { - if (getPendingRanges(table).isEmpty()) + Map<Range, Collection<InetAddress>> ranges = getPendingRanges(table); + if (ranges.isEmpty()) return naturalEndpoints; List<InetAddress> endpoints = new ArrayList<InetAddress>(naturalEndpoints); - for (Map.Entry<Range, Collection<InetAddress>> entry : getPendingRanges(table).entrySet()) + for (Map.Entry<Range, Collection<InetAddress>> entry : ranges.entrySet()) { if (entry.getKey().contains(token)) {
