Author: jbellis
Date: Tue May 10 16:53:26 2011
New Revision: 1101541

URL: http://svn.apache.org/viewvc?rev=1101541&view=rev
Log:
improve KsDef backwards-compatibility

Modified:
    cassandra/branches/cassandra-0.8/NEWS.txt
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/KSMetaData.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java
    
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java

Modified: cassandra/branches/cassandra-0.8/NEWS.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/NEWS.txt?rev=1101541&r1=1101540&r2=1101541&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/NEWS.txt (original)
+++ cassandra/branches/cassandra-0.8/NEWS.txt Tue May 10 16:53:26 2011
@@ -10,9 +10,8 @@ Upgrading
       recommended but not required. (Skipping this will result in
       replay of entire commitlog, so it will take longer to restart but
       is otherwise harmless.)
-    - 0.8 is API-compatible with 0.7 with the exception of keyspace
-      modifications. For everything else, you can continue to use your
-      0.7 clients.
+    - 0.8 is fully API-compatible with 0.7.  You can continue
+      to use your 0.7 clients.
     - Avro record classes used in map/reduce and Hadoop streaming code have
       moved from org.apache.cassandra.avro to org.apache.cassandra.hadoop.avro,
       applications using these classes will need to be updated accordingly.

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java?rev=1101541&r1=1101540&r2=1101541&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/config/CFMetaData.java
 Tue May 10 16:53:26 2011
@@ -629,7 +629,7 @@ public final class CFMetaData
             
cf_def.setRow_cache_provider(CFMetaData.DEFAULT_ROW_CACHE_PROVIDER);
     }
 
-    public static CFMetaData 
convertToCFMetaData(org.apache.cassandra.thrift.CfDef cf_def) throws 
InvalidRequestException, ConfigurationException
+    public static CFMetaData fromThrift(org.apache.cassandra.thrift.CfDef 
cf_def) throws InvalidRequestException, ConfigurationException
     {
         ColumnFamilyType cfType = ColumnFamilyType.create(cf_def.column_type);
         if (cfType == null)

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=1101541&r1=1101540&r2=1101541&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
 Tue May 10 16:53:26 2011
@@ -18,10 +18,7 @@
 
 package org.apache.cassandra.config;
 
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
+import java.util.*;
 
 import org.apache.commons.lang.ObjectUtils;
 
@@ -29,6 +26,7 @@ import org.apache.avro.util.Utf8;
 import org.apache.cassandra.io.SerDeUtils;
 import org.apache.cassandra.locator.AbstractReplicationStrategy;
 import org.apache.cassandra.locator.NetworkTopologyStrategy;
+import org.apache.cassandra.thrift.CfDef;
 import org.apache.cassandra.thrift.KsDef;
 
 import org.apache.commons.lang.StringUtils;
@@ -51,7 +49,7 @@ public final class KSMetaData
         this.cfMetaData = Collections.unmodifiableMap(cfmap);
     }
 
-    public static Map<String, String> backwardsCompatibleOptions(KsDef ks_def)
+    public static Map<String, String> forwardsCompatibleOptions(KsDef ks_def)
     {
         Map<String, String> options;
         if (ks_def.isSetReplication_factor())
@@ -165,4 +163,24 @@ public final class KSMetaData
         ret.put("replication_factor", rf.toString());
         return ret;
     }
+
+    public static KSMetaData fromThrift(KsDef ksd, CFMetaData... cfDefs) 
throws ConfigurationException
+    {
+        return new KSMetaData(ksd.name,
+                              
AbstractReplicationStrategy.getClass(ksd.strategy_class),
+                              forwardsCompatibleOptions(ksd),
+                              cfDefs);
+    }
+
+    public static KsDef toThrift(KSMetaData ksm)
+    {
+        List<CfDef> cfDefs = new ArrayList<CfDef>();
+        for (CFMetaData cfm : ksm.cfMetaData().values())
+            cfDefs.add(CFMetaData.convertToThrift(cfm));
+        KsDef ksdef = new KsDef(ksm.name, ksm.strategyClass.getName(), cfDefs);
+        ksdef.setStrategy_options(ksm.strategyOptions);
+        if (ksm.strategyOptions != null && 
ksm.strategyOptions.containsKey("replication_factor"))
+            
ksdef.setReplication_factor(Integer.parseInt(ksm.strategyOptions.get("replication_factor")));
+        return ksdef;
+    }
 }

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=1101541&r1=1101540&r2=1101541&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/CassandraServer.java
 Tue May 10 16:53:26 2011
@@ -578,12 +578,7 @@ public class CassandraServer implements 
         if (ksm == null)
             throw new NotFoundException();
 
-        List<CfDef> cfDefs = new ArrayList<CfDef>();
-        for (CFMetaData cfm : ksm.cfMetaData().values())
-            cfDefs.add(CFMetaData.convertToThrift(cfm));
-        KsDef ksdef = new KsDef(ksm.name, ksm.strategyClass.getName(), cfDefs);
-        ksdef.setStrategy_options(ksm.strategyOptions);
-        return ksdef;
+        return KSMetaData.toThrift(ksm);
     }
 
     public List<KeySlice> get_range_slices(ColumnParent column_parent, 
SlicePredicate predicate, KeyRange range, ConsistencyLevel consistency_level)
@@ -809,7 +804,7 @@ public class CassandraServer implements 
 
         try
         {
-            applyMigrationOnStage(new 
AddColumnFamily(CFMetaData.convertToCFMetaData(cf_def)));
+            applyMigrationOnStage(new 
AddColumnFamily(CFMetaData.fromThrift(cf_def)));
             return DatabaseDescriptor.getDefsVersion().toString();
         }
         catch (ConfigurationException e)
@@ -874,16 +869,11 @@ public class CassandraServer implements 
             for (CfDef cfDef : ks_def.cf_defs)
             {
                 ThriftValidation.validateCfDef(cfDef);
-                cfDefs.add(CFMetaData.convertToCFMetaData(cfDef));
+                cfDefs.add(CFMetaData.fromThrift(cfDef));
             }
 
             ThriftValidation.validateKsDef(ks_def);
-            KSMetaData ksm = new KSMetaData(ks_def.name,
-                                            
AbstractReplicationStrategy.getClass(ks_def.strategy_class),
-                                            
KSMetaData.backwardsCompatibleOptions(ks_def),
-                                            cfDefs.toArray(new 
CFMetaData[cfDefs.size()]));
-
-            applyMigrationOnStage(new AddKeyspace(ksm));
+            applyMigrationOnStage(new 
AddKeyspace(KSMetaData.fromThrift(ks_def, cfDefs.toArray(new 
CFMetaData[cfDefs.size()]))));
             return DatabaseDescriptor.getDefsVersion().toString();
         }
         catch (ConfigurationException e)
@@ -941,10 +931,7 @@ public class CassandraServer implements 
         try
         {
             ThriftValidation.validateKsDef(ks_def);
-            KSMetaData ksm = new KSMetaData(ks_def.name,
-                                            
AbstractReplicationStrategy.getClass(ks_def.strategy_class),
-                                            
KSMetaData.backwardsCompatibleOptions(ks_def));
-            applyMigrationOnStage(new UpdateKeyspace(ksm));
+            applyMigrationOnStage(new 
UpdateKeyspace(KSMetaData.fromThrift(ks_def)));
             return DatabaseDescriptor.getDefsVersion().toString();
         }
         catch (ConfigurationException e)

Modified: 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=1101541&r1=1101540&r2=1101541&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java
 (original)
+++ 
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java
 Tue May 10 16:53:26 2011
@@ -591,11 +591,11 @@ public class ThriftValidation
         }
     }
 
-    static void validateKsDef(KsDef ks_def) throws ConfigurationException
+    public static void validateKsDef(KsDef ks_def) throws 
ConfigurationException
     {
         // Attempt to instantiate the ARS, which will throw a ConfigException 
if
         //  the strategy_options aren't fully formed or if the ARS Classname 
is invalid.
-        Map<String, String> options = 
KSMetaData.backwardsCompatibleOptions(ks_def);
+        Map<String, String> options = 
KSMetaData.forwardsCompatibleOptions(ks_def);
         TokenMetadata tmd = StorageService.instance.getTokenMetadata();
         IEndpointSnitch eps = DatabaseDescriptor.getEndpointSnitch();
         Class<? extends AbstractReplicationStrategy> cls = 
AbstractReplicationStrategy.getClass(ks_def.strategy_class);


Reply via email to