Return-Path: X-Original-To: apmail-cassandra-commits-archive@www.apache.org Delivered-To: apmail-cassandra-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id BB302E523 for ; Tue, 8 Jan 2013 19:26:12 +0000 (UTC) Received: (qmail 55861 invoked by uid 500); 8 Jan 2013 19:26:12 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 55819 invoked by uid 500); 8 Jan 2013 19:26:12 -0000 Mailing-List: contact commits-help@cassandra.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cassandra.apache.org Delivered-To: mailing list commits@cassandra.apache.org Received: (qmail 55755 invoked by uid 99); 8 Jan 2013 19:26:12 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 08 Jan 2013 19:26:12 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 42827115B1; Tue, 8 Jan 2013 19:26:11 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: brandonwilliams@apache.org To: commits@cassandra.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [2/3] git commit: Handle states for non-vnode clusters correctly. Patch by brandonwilliams reviewed by slebresne for CASSANDRA-5127 Message-Id: <20130108192612.42827115B1@tyr.zones.apache.org> Date: Tue, 8 Jan 2013 19:26:11 +0000 (UTC) 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 Authored: Tue Jan 8 13:25:13 2013 -0600 Committer: Brandon Williams 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 getTokensFor(InetAddress endpoint) + private Collection 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 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 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 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 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);