Author: jbellis
Date: Wed Oct 19 04:04:55 2011
New Revision: 1185961

URL: http://svn.apache.org/viewvc?rev=1185961&view=rev
Log:
add KSM.systemKeyspace and cloneWith methods
patch by jbellis; reviewed by pyaskevich for CASSANDRA-3292

Modified:
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java?rev=1185961&r1=1185960&r2=1185961&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
 Wed Oct 19 04:04:55 2011
@@ -18,7 +18,10 @@
 
 package org.apache.cassandra.config;
 
-import java.io.*;
+import java.io.File;
+import java.io.FileFilter;
+import java.io.IOException;
+import java.io.InputStream;
 import java.net.InetAddress;
 import java.net.URL;
 import java.net.UnknownHostException;
@@ -388,15 +391,7 @@ public class DatabaseDescriptor
                 partitioner.getTokenFactory().validate(conf.initial_token);
 
             // Hardcoded system tables
-            KSMetaData systemMeta = new KSMetaData(Table.SYSTEM_TABLE,
-                                                   LocalStrategy.class,
-                                                   KSMetaData.optsWithRF(1),
-                                                   CFMetaData.StatusCf,
-                                                   CFMetaData.HintsCf,
-                                                   CFMetaData.MigrationsCf,
-                                                   CFMetaData.SchemaCf,
-                                                   CFMetaData.IndexCf,
-                                                   CFMetaData.NodeIdCf);
+            KSMetaData systemMeta = KSMetaData.systemKeyspace();
             CFMetaData.map(CFMetaData.StatusCf);
             CFMetaData.map(CFMetaData.HintsCf);
             CFMetaData.map(CFMetaData.MigrationsCf);

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java?rev=1185961&r1=1185960&r2=1185961&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java
 Wed Oct 19 04:04:55 2011
@@ -21,16 +21,17 @@ package org.apache.cassandra.config;
 import java.util.*;
 
 import org.apache.commons.lang.ObjectUtils;
+import org.apache.commons.lang.StringUtils;
 
 import org.apache.avro.util.Utf8;
+import org.apache.cassandra.db.Table;
 import org.apache.cassandra.io.SerDeUtils;
 import org.apache.cassandra.locator.AbstractReplicationStrategy;
+import org.apache.cassandra.locator.LocalStrategy;
 import org.apache.cassandra.locator.NetworkTopologyStrategy;
 import org.apache.cassandra.thrift.CfDef;
 import org.apache.cassandra.thrift.KsDef;
 
-import org.apache.commons.lang.StringUtils;
-
 public final class KSMetaData
 {
     public final String name;
@@ -56,6 +57,35 @@ public final class KSMetaData
         this.durableWrites = durable_writes;
     }
 
+    private KSMetaData(String name, Class<? extends 
AbstractReplicationStrategy> strategyClass, Map<String, String> 
strategyOptions, boolean durableWrites, Iterable<CFMetaData> cfDefs)
+    {
+        this.name = name;
+        this.strategyClass = strategyClass == null ? 
NetworkTopologyStrategy.class : strategyClass;
+        this.strategyOptions = strategyOptions;
+        Map<String, CFMetaData> cfmap = new HashMap<String, CFMetaData>();
+        for (CFMetaData cfm : cfDefs)
+            cfmap.put(cfm.cfName, cfm);
+        this.cfMetaData = Collections.unmodifiableMap(cfmap);
+        this.durableWrites = durableWrites;
+    }
+
+    public static KSMetaData cloneWith(KSMetaData ksm, Iterable<CFMetaData> 
cfDefs)
+    {
+        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.strategyOptions, ksm.durableWrites, cfDefs);
+    }
+
+    public static KSMetaData systemKeyspace()
+    {
+        List<CFMetaData> cfDefs = Arrays.asList(CFMetaData.StatusCf,
+                                                CFMetaData.HintsCf,
+                                                CFMetaData.MigrationsCf,
+                                                CFMetaData.SchemaCf,
+                                                CFMetaData.IndexCf,
+                                                CFMetaData.NodeIdCf);
+        return new KSMetaData(Table.SYSTEM_TABLE, LocalStrategy.class, 
optsWithRF(1), false, cfDefs);
+    }
+
+
     public static Map<String, String> forwardsCompatibleOptions(KsDef ks_def)
     {
         Map<String, String> options;
@@ -165,10 +195,10 @@ public final class KSMetaData
         maybeAddReplicationFactor(strategyOptions, 
ks.strategy_class.toString(), ks.replication_factor);
 
         int cfsz = ks.cf_defs.size();
-        CFMetaData[] cfMetaData = new CFMetaData[cfsz];
+        List<CFMetaData> cfMetaData = new ArrayList<CFMetaData>(cfsz);
         Iterator<org.apache.cassandra.db.migration.avro.CfDef> cfiter = 
ks.cf_defs.iterator();
         for (int i = 0; i < cfsz; i++)
-            cfMetaData[i] = CFMetaData.inflate(cfiter.next());
+            cfMetaData.add(CFMetaData.inflate(cfiter.next()));
 
         return new KSMetaData(ks.name.toString(), repStratClass, 
strategyOptions, ks.durable_writes, cfMetaData);
     }
@@ -192,7 +222,7 @@ public final class KSMetaData
                               
AbstractReplicationStrategy.getClass(ksd.strategy_class),
                               forwardsCompatibleOptions(ksd),
                               ksd.durable_writes,
-                              cfDefs);
+                              Arrays.asList(cfDefs));
     }
 
     public static KsDef toThrift(KSMetaData ksm)

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java?rev=1185961&r1=1185960&r2=1185961&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/AddColumnFamily.java
 Wed Oct 19 04:04:55 2011
@@ -2,9 +2,9 @@ package org.apache.cassandra.db.migratio
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
+
+import com.google.common.collect.Iterables;
 
 import org.apache.cassandra.config.*;
 import org.apache.cassandra.db.Table;
@@ -67,9 +67,7 @@ public class AddColumnFamily extends Mig
     
     private KSMetaData makeNewKeyspaceDefinition(KSMetaData ksm)
     {
-        List<CFMetaData> newCfs = new 
ArrayList<CFMetaData>(ksm.cfMetaData().values());
-        newCfs.add(cfm);
-        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.strategyOptions, newCfs.toArray(new CFMetaData[newCfs.size()]));
+        return KSMetaData.cloneWith(ksm, 
Iterables.concat(ksm.cfMetaData().values(), Collections.singleton(cfm)));
     }
     
     public void applyModels() throws IOException

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java?rev=1185961&r1=1185960&r2=1185961&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/DropColumnFamily.java
 Wed Oct 19 04:04:55 2011
@@ -65,7 +65,7 @@ public class DropColumnFamily extends Mi
         List<CFMetaData> newCfs = new 
ArrayList<CFMetaData>(ksm.cfMetaData().values());
         newCfs.remove(cfm);
         assert newCfs.size() == ksm.cfMetaData().size() - 1;
-        return new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.strategyOptions, newCfs.toArray(new CFMetaData[newCfs.size()]));
+        return KSMetaData.cloneWith(ksm, newCfs);
     }
 
     public void applyModels() throws IOException

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java?rev=1185961&r1=1185960&r2=1185961&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/db/migration/UpdateKeyspace.java
 Wed Oct 19 04:04:55 2011
@@ -52,7 +52,7 @@ public class UpdateKeyspace extends Migr
         if (oldKsm == null)
             throw new ConfigurationException(ksm.name + " cannot be updated 
because it doesn't exist.");
 
-        this.newKsm = new KSMetaData(ksm.name, ksm.strategyClass, 
ksm.strategyOptions, ksm.durableWrites, 
oldKsm.cfMetaData().values().toArray(new CFMetaData[]{}));
+        this.newKsm = KSMetaData.cloneWith(ksm, oldKsm.cfMetaData().values());
         rm = makeDefinitionMutation(newKsm, oldKsm, newVersion);
     }
     


Reply via email to