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 8BA13D502 for ; Wed, 11 Jul 2012 22:06:22 +0000 (UTC) Received: (qmail 90892 invoked by uid 500); 11 Jul 2012 22:06:22 -0000 Delivered-To: apmail-cassandra-commits-archive@cassandra.apache.org Received: (qmail 90838 invoked by uid 500); 11 Jul 2012 22:06:22 -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 90663 invoked by uid 99); 11 Jul 2012 22:06:22 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 11 Jul 2012 22:06:22 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id DE7DB1307A; Wed, 11 Jul 2012 22:06:21 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: xedin@apache.org To: commits@cassandra.apache.org X-Mailer: ASF-Git Admin Mailer Subject: [3/3] git commit: fix 1.0.x node join to mixed version cluster, other nodes >= 1.1 patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-4195 Message-Id: <20120711220621.DE7DB1307A@tyr.zones.apache.org> Date: Wed, 11 Jul 2012 22:06:21 +0000 (UTC) fix 1.0.x node join to mixed version cluster, other nodes >= 1.1 patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-4195 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/51a9fd13 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/51a9fd13 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/51a9fd13 Branch: refs/heads/trunk Commit: 51a9fd131a815bf4d368d89b0961429a1d51a532 Parents: 84a1d60 Author: Pavel Yaskevich Authored: Mon Jul 9 23:27:57 2012 +0300 Committer: Pavel Yaskevich Committed: Thu Jul 12 00:57:18 2012 +0300 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/cassandra/service/MigrationManager.java | 30 +++++++++------ 2 files changed, 19 insertions(+), 12 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/51a9fd13/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index c752244..d3cca6c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,6 +9,7 @@ sstables, such as when convertinb back from LCS (CASSANDRA-4287) * Oversize integer in CQL throws NumberFormatException (CASSANDRA-4291) * Set gc_grace on index CF to 0 (CASSANDRA-4314) + * fix 1.0.x node join to mixed version cluster, other nodes >= 1.1 (CASSANDRA-4195) 1.0.10 http://git-wip-us.apache.org/repos/asf/cassandra/blob/51a9fd13/src/java/org/apache/cassandra/service/MigrationManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/MigrationManager.java b/src/java/org/apache/cassandra/service/MigrationManager.java index f9e5c33..7adbfea 100644 --- a/src/java/org/apache/cassandra/service/MigrationManager.java +++ b/src/java/org/apache/cassandra/service/MigrationManager.java @@ -56,32 +56,29 @@ public class MigrationManager implements IEndpointStateChangeSubscriber private static volatile UUID highestKnown; - public void onJoin(InetAddress endpoint, EndpointState epState) { + public void onJoin(InetAddress endpoint, EndpointState epState) + { VersionedValue value = epState.getApplicationState(ApplicationState.SCHEMA); + if (value != null) - { - UUID theirVersion = UUID.fromString(value.value); - rectify(theirVersion, endpoint); - } + rectify(UUID.fromString(value.value), endpoint); } public void onChange(InetAddress endpoint, ApplicationState state, VersionedValue value) { if (state != ApplicationState.SCHEMA) return; - UUID theirVersion = UUID.fromString(value.value); - rectify(theirVersion, endpoint); + + rectify(UUID.fromString(value.value), endpoint); } /** gets called after a this node joins a cluster */ public void onAlive(InetAddress endpoint, EndpointState state) { VersionedValue value = state.getApplicationState(ApplicationState.SCHEMA); + if (value != null) - { - UUID theirVersion = UUID.fromString(value.value); - rectify(theirVersion, endpoint); - } + rectify(UUID.fromString(value.value), endpoint); } public void onDead(InetAddress endpoint, EndpointState state) { } @@ -89,13 +86,22 @@ public class MigrationManager implements IEndpointStateChangeSubscriber public void onRestart(InetAddress endpoint, EndpointState state) { } public void onRemove(InetAddress endpoint) { } - + /** * will either push or pull an updating depending on who is behind. * fat clients should never push their schemas (since they have no local storage). */ public static void rectify(UUID theirVersion, InetAddress endpoint) { + if (theirVersion.version() != 1) + { + logger.warn("Can't merge remove schema because node operates in the mixed version cluster " + + "(Please upgrade all nodes to >= 1.1 to be able to perform schema migrations)."); + + highestKnown = Schema.instance.getVersion(); + return; + } + updateHighestKnown(theirVersion); UUID myVersion = Schema.instance.getVersion(); if (theirVersion.timestamp() < myVersion.timestamp()