From dd5cebce853eb09dfc3a1d27c463834ef2f298b8 Mon Sep 17 00:00:00 2001 From: Gary Dusbabek Date: Tue, 27 Jul 2010 14:50:10 +0000 Subject: [PATCH] push migrations when SS.loadSchemaFromYaml is called. patch by gdusbabek, reviewed by jbellis. CASSANDRA-1321 git-svn-id: https://svn.apache.org/repos/asf/cassandra/trunk@979734 13f79535-47bb-0310-9956-ffa450edef68 --- .../db/DefinitionsUpdateResponseVerbHandler.java | 6 ++++-- .../apache/cassandra/service/StorageService.java | 16 +++++++++++----- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/src/java/org/apache/cassandra/db/DefinitionsUpdateResponseVerbHandler.java b/src/java/org/apache/cassandra/db/DefinitionsUpdateResponseVerbHandler.java index edca073fbe..8cb2ccfff8 100644 --- a/src/java/org/apache/cassandra/db/DefinitionsUpdateResponseVerbHandler.java +++ b/src/java/org/apache/cassandra/db/DefinitionsUpdateResponseVerbHandler.java @@ -60,8 +60,10 @@ public class DefinitionsUpdateResponseVerbHandler implements IVerbHandler protected void runMayThrow() throws Exception { // check to make sure the current version is before this one. - if (DatabaseDescriptor.getDefsVersion().timestamp() >= version.timestamp()) - logger.debug("Not applying " + version.toString()); + if (DatabaseDescriptor.getDefsVersion().timestamp() == version.timestamp()) + logger.debug("Not appling (equal) " + version.toString()); + else if (DatabaseDescriptor.getDefsVersion().timestamp() > version.timestamp()) + logger.debug("Not applying (before)" + version.toString()); else { logger.debug("Applying {} from {}", m.getClass().getSimpleName(), message.getFrom()); diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 672dfa4788..5c7a9647c2 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -31,7 +31,6 @@ import javax.management.ObjectName; import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ColumnDefinition; -import org.apache.cassandra.config.Config; import org.apache.cassandra.config.RawColumnDefinition; import org.apache.cassandra.config.RawColumnFamily; import org.apache.cassandra.config.RawKeyspace; @@ -77,10 +76,7 @@ import org.apache.log4j.Level; import org.yaml.snakeyaml.Dumper; import org.yaml.snakeyaml.DumperOptions; import org.yaml.snakeyaml.Yaml; -import org.yaml.snakeyaml.introspector.Property; -import org.yaml.snakeyaml.nodes.NodeTuple; import org.yaml.snakeyaml.nodes.Tag; -import org.yaml.snakeyaml.representer.Representer; /* * This abstraction contains the token/identifier of this node @@ -1667,8 +1663,13 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe // blow up if there is a schema saved. if (DatabaseDescriptor.getDefsVersion().timestamp() > 0 || Migration.getLastMigrationId() != null) throw new ConfigurationException("Cannot load from XML on top of pre-existing schemas."); + + Migration migration = null; for (KSMetaData table : DatabaseDescriptor.readTablesFromYaml()) - new AddKeyspace(table).apply(); + { + migration = new AddKeyspace(table); + migration.apply(); + } assert DatabaseDescriptor.getDefsVersion().timestamp() > 0; DefsTable.dumpToStorage(DatabaseDescriptor.getDefsVersion()); @@ -1689,6 +1690,11 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe } } + // we don't want to announce after every Migration.apply(). keep track of the last one and then announce the + // current version. + if (migration != null) + migration.announce(); + } public String exportSchema() throws IOException