Author: gdusbabek
Date: Thu Apr 8 13:48:16 2010
New Revision: 931942
URL: http://svn.apache.org/viewvc?rev=931942&view=rev
Log:
SS.loadSchemaFromXML should record migrations. Patch by Gary Dusbabek, reviewed
by Jonathan Ellis. CASSANDRA-963
Modified:
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java
cassandra/trunk/test/unit/org/apache/cassandra/service/EmbeddedCassandraServiceTest.java
Modified:
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=931942&r1=931941&r2=931942&view=diff
==============================================================================
---
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
(original)
+++
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
Thu Apr 8 13:48:16 2010
@@ -554,8 +554,10 @@ public class DatabaseDescriptor
CFMetaData.fixMaxId();
}
- public static void readTablesFromXml() throws ConfigurationException
+ /** reads xml. doesn't populate any internal structures. */
+ public static Collection<KSMetaData> readTablesFromXml() throws
ConfigurationException
{
+ List<KSMetaData> defs = new ArrayList<KSMetaData>();
XMLUtils xmlUtils = null;
try
{
@@ -741,9 +743,7 @@ public class DatabaseDescriptor
// insert it into the table dictionary.
cfDefs[j] = new CFMetaData(tableName, cfName, columnType,
comparator, subcolumnComparator, comment, rowCacheSize, keyCacheSize,
readRepairChance);
}
-
- KSMetaData meta = new KSMetaData(ksName, strategyClass,
replicationFactor, snitch, cfDefs);
- tables.put(meta.name, meta);
+ defs.add(new KSMetaData(ksName, strategyClass,
replicationFactor, snitch, cfDefs));
}
}
catch (XPathExpressionException e)
@@ -758,8 +758,7 @@ public class DatabaseDescriptor
ex.initCause(e);
throw ex;
}
- if (DatabaseDescriptor.listenAddress != null)
- defsVersion =
UUIDGen.makeType1UUIDFromHost(FBUtilities.getLocalAddress());
+ return defs;
}
public static IAuthenticator getAuthenticator()
Modified:
cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=931942&r1=931941&r2=931942&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Thu Apr 8 13:48:16 2010
@@ -35,8 +35,10 @@ import com.google.common.collect.Multima
import org.apache.cassandra.concurrent.*;
import org.apache.cassandra.config.ConfigurationException;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.commitlog.CommitLog;
+import org.apache.cassandra.db.migration.AddKeyspace;
import org.apache.cassandra.db.migration.Migration;
import org.apache.cassandra.dht.*;
import org.apache.cassandra.gms.*;
@@ -1578,11 +1580,13 @@ public class StorageService implements I
* @throws IOException
*/
public void loadSchemaFromXML() throws ConfigurationException, IOException
- {
+ {
// 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.");
- DatabaseDescriptor.readTablesFromXml();
+ for (KSMetaData table : DatabaseDescriptor.readTablesFromXml())
+ new AddKeyspace(table).apply();
+
assert DatabaseDescriptor.getDefsVersion().timestamp() > 0;
DefsTable.dumpToStorage(DatabaseDescriptor.getDefsVersion());
// flush system and definition tables.
Modified: cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java?rev=931942&r1=931941&r2=931942&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/SchemaLoader.java Thu Apr 8
13:48:16 2010
@@ -20,6 +20,7 @@ package org.apache.cassandra;
import org.apache.cassandra.config.ConfigurationException;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.KSMetaData;
import org.junit.BeforeClass;
public class SchemaLoader
@@ -31,7 +32,8 @@ public class SchemaLoader
{
try
{
- DatabaseDescriptor.readTablesFromXml();
+ for (KSMetaData ksm : DatabaseDescriptor.readTablesFromXml())
+ DatabaseDescriptor.setTableDefinition(ksm,
DatabaseDescriptor.getDefsVersion());
}
catch (ConfigurationException e)
{
Modified:
cassandra/trunk/test/unit/org/apache/cassandra/service/EmbeddedCassandraServiceTest.java
URL:
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/service/EmbeddedCassandraServiceTest.java?rev=931942&r1=931941&r2=931942&view=diff
==============================================================================
---
cassandra/trunk/test/unit/org/apache/cassandra/service/EmbeddedCassandraServiceTest.java
(original)
+++
cassandra/trunk/test/unit/org/apache/cassandra/service/EmbeddedCassandraServiceTest.java
Thu Apr 8 13:48:16 2010
@@ -26,6 +26,7 @@ import java.io.UnsupportedEncodingExcept
import org.apache.cassandra.config.ConfigurationException;
import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.config.KSMetaData;
import org.apache.cassandra.thrift.Cassandra;
import org.apache.cassandra.thrift.ColumnOrSuperColumn;
import org.apache.cassandra.thrift.ColumnPath;
@@ -70,7 +71,8 @@ public class EmbeddedCassandraServiceTes
// Tell cassandra where the configuration files are.
// Use the test configuration file.
System.setProperty("storage-config", "test/conf");
- DatabaseDescriptor.readTablesFromXml();
+ for (KSMetaData table : DatabaseDescriptor.readTablesFromXml())
+ DatabaseDescriptor.setTableDefinition(table,
DatabaseDescriptor.getDefsVersion());
cassandra = new EmbeddedCassandraService();
cassandra.init();