You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2013/01/08 20:26:11 UTC

[2/3] git commit: Handle states for non-vnode clusters correctly. Patch by brandonwilliams reviewed by slebresne for CASSANDRA-5127

Handle states for non-vnode clusters correctly.
Patch by brandonwilliams reviewed by slebresne for CASSANDRA-5127


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

Branch: refs/heads/trunk
Commit: 945853076c44d071ba5b554ecb69a080e5719d32
Parents: 8349fce
Author: Brandon Williams <br...@apache.org>
Authored: Tue Jan 8 13:25:13 2013 -0600
Committer: Brandon Williams <br...@apache.org>
Committed: Tue Jan 8 13:25:13 2013 -0600

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 src/java/org/apache/cassandra/gms/Gossiper.java    |    5 ++
 .../apache/cassandra/service/StorageService.java   |   39 ++++++---------
 3 files changed, 22 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/94585307/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 733c3a3..16473ec 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -24,6 +24,7 @@
  * Ensure CL guarantees on digest mismatch (CASSANDRA-5113)
  * Validate correctly selects on composite partition key (CASSANDRA-5122)
  * Fix exception when adding collection (CASSANDRA-5117)
+ * Handle states for non-vnode clusters correctly (CASSANDRA-5127)
 Merged from 1.1:
  * Pig: correctly decode row keys in widerow mode (CASSANDRA-5098)
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/94585307/src/java/org/apache/cassandra/gms/Gossiper.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java
index 1179815..b861b56 100644
--- a/src/java/org/apache/cassandra/gms/Gossiper.java
+++ b/src/java/org/apache/cassandra/gms/Gossiper.java
@@ -625,6 +625,11 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean
         return false;
     }
 
+    public boolean usesVnodes(InetAddress endpoint)
+    {
+        return usesHostId(endpoint) && getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.TOKENS) != null;
+    }
+
     public UUID getHostId(InetAddress endpoint)
     {
         if (!usesHostId(endpoint))

http://git-wip-us.apache.org/repos/asf/cassandra/blob/94585307/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index 9cddc1a..b9e4c21 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -1193,16 +1193,21 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
         return vvalue.getBytes(ISO_8859_1);
     }
 
-    private Collection<Token> getTokensFor(InetAddress endpoint)
+    private Collection<Token> getTokensFor(InetAddress endpoint, String piece)
     {
-        try
-        {
-            return TokenSerializer.deserialize(getPartitioner(), new DataInputStream(new ByteArrayInputStream(getApplicationStateValue(endpoint, ApplicationState.TOKENS))));
-        }
-        catch (IOException e)
+        if (Gossiper.instance.usesVnodes(endpoint))
         {
-            throw new RuntimeException(e);
+            try
+            {
+                return TokenSerializer.deserialize(getPartitioner(), new DataInputStream(new ByteArrayInputStream(getApplicationStateValue(endpoint, ApplicationState.TOKENS))));
+            }
+            catch (IOException e)
+            {
+                throw new RuntimeException(e);
+            }
         }
+        else
+            return Arrays.asList(getPartitioner().getTokenFactory().fromString(piece));
     }
 
     /**
@@ -1220,10 +1225,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
         //   versions >= 1.2 .....: use TOKENS app state
         Collection<Token> tokens;
         // explicitly check for TOKENS, because a bootstrapping node might be bootstrapping in legacy mode; that is, not using vnodes and no token specified
-        if (Gossiper.instance.usesHostId(endpoint) && Gossiper.instance.getEndpointStateForEndpoint(endpoint).getApplicationState(ApplicationState.TOKENS) != null)
-            tokens = getTokensFor(endpoint);
-        else
-            tokens = Arrays.asList(getPartitioner().getTokenFactory().fromString(pieces[1]));
+        tokens = getTokensFor(endpoint, pieces[1]);
 
         if (logger.isDebugEnabled())
             logger.debug("Node " + endpoint + " state bootstrapping, token " + tokens);
@@ -1267,10 +1269,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
 
         Collection<Token> tokens;
 
-        if (Gossiper.instance.usesHostId(endpoint))
-            tokens = getTokensFor(endpoint);
-        else
-            tokens = Arrays.asList(getPartitioner().getTokenFactory().fromString(pieces[1]));
+        tokens = getTokensFor(endpoint, pieces[1]);
 
         if (logger.isDebugEnabled())
             logger.debug("Node " + endpoint + " state normal, token " + tokens);
@@ -1407,10 +1406,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
     {
         assert pieces.length >= 2;
         Collection<Token> tokens;
-        if (Gossiper.instance.usesHostId(endpoint))
-            tokens = getTokensFor(endpoint);
-        else
-            tokens =  Arrays.asList(getPartitioner().getTokenFactory().fromString(pieces[1]));
+        tokens = getTokensFor(endpoint, pieces[1]);
 
         if (logger.isDebugEnabled())
             logger.debug("Node " + endpoint + " state leaving, tokens " + tokens);
@@ -1446,10 +1442,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe
         assert pieces.length >= 2;
         Collection<Token> tokens;
         Integer version = MessagingService.instance().getVersion(endpoint);
-        if (!Gossiper.instance.usesHostId(endpoint))
-            tokens = Arrays.asList(getPartitioner().getTokenFactory().fromString(pieces[1]));
-        else
-            tokens = getTokensFor(endpoint);
+        tokens = getTokensFor(endpoint, pieces[1]);
 
         if (logger.isDebugEnabled())
             logger.debug("Node " + endpoint + " state left, tokens " + tokens);