You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by gd...@apache.org on 2010/02/08 20:38:17 UTC
svn commit: r907771 -
/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Author: gdusbabek
Date: Mon Feb 8 19:38:16 2010
New Revision: 907771
URL: http://svn.apache.org/viewvc?rev=907771&view=rev
Log:
Avoid deadlocks by creating all replication strategies when SS in instantiated. Patch by Gary Dusbabek, reviewed by Jonthan Ellis. CASSANDRA-778 (regression introduced in CASSANDRA-620).
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=907771&r1=907770&r2=907771&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Mon Feb 8 19:38:16 2010
@@ -136,7 +136,7 @@
new NamedThreadFactory("CONSISTENCY-MANAGER"));
/* We use this interface to determine where replicas need to be placed */
- private Map<String, AbstractReplicationStrategy> replicationStrategies = new HashMap<String, AbstractReplicationStrategy>();
+ private Map<String, AbstractReplicationStrategy> replicationStrategies;
/* Are we starting this node in bootstrap mode? */
private boolean isBootstrapMode;
@@ -219,17 +219,23 @@
MessagingService.instance.registerVerbHandlers(Verb.GOSSIP_DIGEST_SYN, new Gossiper.GossipDigestSynVerbHandler());
MessagingService.instance.registerVerbHandlers(Verb.GOSSIP_DIGEST_ACK, new Gossiper.GossipDigestAckVerbHandler());
MessagingService.instance.registerVerbHandlers(Verb.GOSSIP_DIGEST_ACK2, new Gossiper.GossipDigestAck2VerbHandler());
- }
- public synchronized AbstractReplicationStrategy getReplicationStrategy(String table)
- {
- AbstractReplicationStrategy strat = replicationStrategies.get(table);
- if (strat == null)
+ replicationStrategies = new HashMap<String, AbstractReplicationStrategy>();
+ for (String table : DatabaseDescriptor.getNonSystemTables())
{
- strat = StorageService.getReplicationStrategy(tokenMetadata_, table);
+ AbstractReplicationStrategy strat = getReplicationStrategy(tokenMetadata_, table);
replicationStrategies.put(table, strat);
}
- return strat;
+ replicationStrategies = Collections.unmodifiableMap(replicationStrategies);
+ }
+
+ public AbstractReplicationStrategy getReplicationStrategy(String table)
+ {
+ AbstractReplicationStrategy ars = replicationStrategies.get(table);
+ if (ars == null)
+ throw new RuntimeException(String.format("No replica strategy configured for %s", table));
+ else
+ return ars;
}
public static AbstractReplicationStrategy getReplicationStrategy(TokenMetadata tokenMetadata, String table)