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();


Reply via email to