You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Jason Fager (JIRA)" <ji...@apache.org> on 2010/08/08 17:29:16 UTC
[jira] Created: (CASSANDRA-1370) TokenMetaData.getPendingRangesMM()
is unnecessarily synchronized
TokenMetaData.getPendingRangesMM() is unnecessarily synchronized
----------------------------------------------------------------
Key: CASSANDRA-1370
URL: https://issues.apache.org/jira/browse/CASSANDRA-1370
Project: Cassandra
Issue Type: Improvement
Components: Core
Affects Versions: 0.6.4
Reporter: Jason Fager
Priority: Minor
TokenMetaData.getPendingRangesMM() is currently synchronized to avoid a race condition where multiple threads might create a multimap for the given table. However, the pendingRanges instance variable that's the subject of the race condition is already a ConcurrentHashMap, and the race condition can be avoided by using putIfAbsent, leaving the case where the table's map is already initialized lock-free:
private Multimap<Range, InetAddress> getPendingRangesMM(String table)
{
Multimap<Range, InetAddress> map = pendingRanges.get(table);
if (map == null)
{
map = HashMultimap.create();
Multimap<Range, InetAddress> fasterHorse
= pendingRanges.putIfAbsent(table, map);
if(fasterHorse != null) {
//another thread beat us to creating the map, oh well.
map = fasterHorse;
}
}
return map;
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.