You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2013/12/14 05:11:55 UTC

[3/6] git commit: fix race referencing tokenMetadataCache patch by jbellis; reviewed by rbranson for CASSANDRA-6485

fix race referencing tokenMetadataCache
patch by jbellis; reviewed by rbranson for CASSANDRA-6485


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a3d91dc9
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a3d91dc9
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a3d91dc9

Branch: refs/heads/trunk
Commit: a3d91dc9d67572e16d9ad92f22b89eb969373899
Parents: 1145573
Author: Jonathan Ellis <jb...@apache.org>
Authored: Fri Dec 13 22:10:13 2013 -0600
Committer: Jonathan Ellis <jb...@apache.org>
Committed: Fri Dec 13 22:10:13 2013 -0600

----------------------------------------------------------------------
 CHANGES.txt                                              |  7 ++-----
 .../cassandra/locator/AbstractReplicationStrategy.java   | 11 ++++++-----
 2 files changed, 8 insertions(+), 10 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/a3d91dc9/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index b7bbe09..e586592 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,9 +1,6 @@
-1.2.14
- * Randomize batchlog candidates selection (CASSANDRA-6481)
-
-
 1.2.13
- * Fix thundering herd on endpoint cache invalidation (CASSANDRA-6345)
+ * Randomize batchlog candidates selection (CASSANDRA-6481)
+ * Fix thundering herd on endpoint cache invalidation (CASSANDRA-6345, 6485)
  * Optimize FD phi calculation (CASSANDRA-6386)
  * Improve initial FD phi estimate when starting up (CASSANDRA-6385)
  * Don't list CQL3 table in CLI describe even if named explicitely 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/a3d91dc9/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java b/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
index 51c4119..c36fde4 100644
--- a/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
+++ b/src/java/org/apache/cassandra/locator/AbstractReplicationStrategy.java
@@ -116,19 +116,20 @@ public abstract class AbstractReplicationStrategy
         ArrayList<InetAddress> endpoints = getCachedEndpoints(keyToken);
         if (endpoints == null)
         {
-            if (tokenMetadataClone == null)
+            TokenMetadata tm; // local reference in case another thread nulls tMC out from under us
+            if ((tm = tokenMetadataClone) == null)
             {
                 // synchronize to prevent thundering herd post-invalidation
                 synchronized (this)
                 {
-                    if (tokenMetadataClone == null)
-                        tokenMetadataClone = tokenMetadata.cloneOnlyTokenMap();
+                    if ((tm = tokenMetadataClone) == null)
+                        tm = tokenMetadataClone = tokenMetadata.cloneOnlyTokenMap();
                 }
                 // if our clone got invalidated, it's possible there is a new token to account for too
-                keyToken = TokenMetadata.firstToken(tokenMetadataClone.sortedTokens(), searchToken);
+                keyToken = TokenMetadata.firstToken(tm.sortedTokens(), searchToken);
             }
 
-            endpoints = new ArrayList<InetAddress>(calculateNaturalEndpoints(searchToken, tokenMetadataClone));
+            endpoints = new ArrayList<InetAddress>(calculateNaturalEndpoints(searchToken, tm));
             cachedEndpoints.put(keyToken, endpoints);
         }