Author: jbellis
Date: Fri May  7 15:13:44 2010
New Revision: 942113

URL: http://svn.apache.org/viewvc?rev=942113&view=rev
Log:
replace String columnfamily type with enum.  patch by Sylvain Lebresne; 
reviewed by jbellis for CASSANDRA-1058

Added:
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyType.java
Modified:
    cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java
    cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java
    cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
    cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
    cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
    cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java
    cassandra/trunk/src/java/org/apache/cassandra/config/Converter.java
    cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
    cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
    cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java
    cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
    cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java
    cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
    cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java

Modified: cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java (original)
+++ cassandra/trunk/contrib/bmt_example/CassandraBulkLoader.java Fri May  7 
15:13:44 2010
@@ -54,6 +54,7 @@ import java.util.List;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.Column;
 import org.apache.cassandra.db.ColumnFamily;
+import org.apache.cassandra.db.ColumnFamilyType;
 import org.apache.cassandra.db.RowMutation;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.dht.BigIntegerToken;
@@ -230,7 +231,10 @@ public class CassandraBulkLoader {
         Column column;
 
         /* Get the first column family from list, this is just to get past 
validation */
-        baseColumnFamily = new ColumnFamily(CFName, 
"Standard",DatabaseDescriptor.getComparator(Keyspace, CFName), 
DatabaseDescriptor.getSubComparator(Keyspace, CFName));
+        baseColumnFamily = new ColumnFamily(CFName,
+                                            ColumnFamilyType.Standard,
+                                            
DatabaseDescriptor.getComparator(Keyspace, CFName),
+                                            
DatabaseDescriptor.getSubComparator(Keyspace, CFName));
         
         for(ColumnFamily cf : ColumnFamiles) {
             bufOut.reset();

Modified: cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/AvroValidation.java Fri 
May  7 15:13:44 2010
@@ -29,6 +29,7 @@ import org.apache.avro.util.Utf8;
 import org.apache.cassandra.config.DatabaseDescriptor;
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.IColumn;
+import org.apache.cassandra.db.ColumnFamilyType;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.db.marshal.MarshalException;
 
@@ -54,12 +55,12 @@ public class AvroValidation {
     }
     
     // FIXME: could use method in ThriftValidation
-    static String validateColumnFamily(String keyspace, String columnFamily) 
throws InvalidRequestException
+    static ColumnFamilyType validateColumnFamily(String keyspace, String 
columnFamily) throws InvalidRequestException
     {
         if (columnFamily.isEmpty())
             throw newInvalidRequestException("non-empty columnfamily is 
required");
         
-        String cfType = DatabaseDescriptor.getColumnFamilyType(keyspace, 
columnFamily);
+        ColumnFamilyType cfType = 
DatabaseDescriptor.getColumnFamilyType(keyspace, columnFamily);
         if (cfType == null)
             throw newInvalidRequestException("unconfigured columnfamily " + 
columnFamily);
         
@@ -70,13 +71,13 @@ public class AvroValidation {
     {
         validateKeyspace(keyspace);
         String column_family = cp.column_family.toString();
-        String cfType = validateColumnFamily(keyspace, column_family);
+        ColumnFamilyType cfType = validateColumnFamily(keyspace, 
column_family);
         
         byte[] column = null, super_column = null;
         if (cp.super_column != null) super_column = cp.super_column.array();
         if (cp.column != null) column = cp.column.array();
         
-        if (cfType.equals("Standard"))
+        if (cfType == ColumnFamilyType.Standard)
         {
             if (super_column != null)
                 throw newInvalidRequestException("supercolumn parameter is 
invalid for standard CF " + column_family);
@@ -106,7 +107,7 @@ public class AvroValidation {
                 throw newInvalidRequestException("supercolumn name length must 
not be greater than " + IColumn.MAX_NAME_LENGTH);
             if (superColumnName.length == 0)
                 throw newInvalidRequestException("supercolumn name must not be 
empty");
-            if (!DatabaseDescriptor.getColumnFamilyType(keyspace, 
cfName).equals("Super"))
+            if (DatabaseDescriptor.getColumnFamilyType(keyspace, cfName) == 
ColumnFamilyType.Standard)
                 throw newInvalidRequestException("supercolumn specified to 
ColumnFamily " + cfName + " containing normal columns");
         }
         

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/avro/CassandraServer.java Fri 
May  7 15:13:44 2010
@@ -416,7 +416,7 @@ public class CassandraServer implements 
         {
             for (ByteBuffer col : del.predicate.column_names)
             {
-                if (del.super_column == null && 
DatabaseDescriptor.getColumnFamilyType(rm.getTable(), cfName).equals("Super"))
+                if (del.super_column == null && 
DatabaseDescriptor.getColumnFamilyType(rm.getTable(), cfName) == 
ColumnFamilyType.Super)
                     rm.delete(new QueryPath(cfName, col.array()), 
del.timestamp);
                 else
                     rm.delete(new QueryPath(cfName, del.super_column.array(), 
col.array()), del.timestamp);

Modified: cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/cli/CliClient.java Fri May  7 
15:13:44 2010
@@ -205,7 +205,7 @@ public class CliClient 
             return;
         }
             
-        isSuper = 
keyspacesMap.get(keySpace).get(columnFamily).get("Type").equals("Super") ? true 
: false;
+        isSuper = 
keyspacesMap.get(keySpace).get(columnFamily).get("Type").equals("Super");
      
         if ((columnSpecCnt < 0) || (columnSpecCnt > 2))
         {
@@ -322,7 +322,7 @@ public class CliClient 
             return;
         }
         
-        boolean isSuper = 
keyspacesMap.get(keySpace).get(columnFamily).get("Type").equals("Super") ? true 
: false;
+        boolean isSuper = 
keyspacesMap.get(keySpace).get(columnFamily).get("Type").equals("Super");
         
         byte[] superColumnName = null;
         byte[] columnName = null;

Modified: cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Fri 
May  7 15:13:44 2010
@@ -27,6 +27,7 @@ import java.util.concurrent.atomic.Atomi
 import org.apache.commons.lang.builder.EqualsBuilder;
 import org.apache.commons.lang.builder.HashCodeBuilder;
 
+import org.apache.cassandra.db.ColumnFamilyType;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.utils.Pair;
 
@@ -70,7 +71,7 @@ public final class CFMetaData
     
     public final String tableName;            // name of table which has this 
column family
     public final String cfName;               // name of the column family
-    public final String columnType;           // type: super, standard, etc.
+    public final ColumnFamilyType cfType;     // type: super, standard, etc.
     public final AbstractType comparator;       // name sorted, time stamp 
sorted etc.
     public final AbstractType subcolumnComparator; // like comparator, for 
supercolumns
     public final String comment; // for humans only
@@ -81,11 +82,11 @@ public final class CFMetaData
     public boolean preloadRowCache;
 
 
-    private CFMetaData(String tableName, String cfName, String columnType, 
AbstractType comparator, AbstractType subcolumnComparator, String comment, 
double rowCacheSize, boolean preloadRowCache, double keyCacheSize, double 
readRepairChance, int cfId)
+    private CFMetaData(String tableName, String cfName, ColumnFamilyType 
cfType, AbstractType comparator, AbstractType subcolumnComparator, String 
comment, double rowCacheSize, boolean preloadRowCache, double keyCacheSize, 
double readRepairChance, int cfId)
     {
         this.tableName = tableName;
         this.cfName = cfName;
-        this.columnType = columnType;
+        this.cfType = cfType;
         this.comparator = comparator;
         this.subcolumnComparator = subcolumnComparator;
         this.comment = comment;
@@ -109,27 +110,27 @@ public final class CFMetaData
         }
     }
     
-    public CFMetaData(String tableName, String cfName, String columnType, 
AbstractType comparator, AbstractType subcolumnComparator, String comment, 
double rowCacheSize, boolean preloadRowCache, double keyCacheSize)
+    public CFMetaData(String tableName, String cfName, ColumnFamilyType 
cfType, AbstractType comparator, AbstractType subcolumnComparator, String 
comment, double rowCacheSize, boolean preloadRowCache, double keyCacheSize)
     {
-        this(tableName, cfName, columnType, comparator, subcolumnComparator, 
comment, rowCacheSize, preloadRowCache, keyCacheSize, 
DEFAULT_READ_REPAIR_CHANCE, nextId());
+        this(tableName, cfName, cfType, comparator, subcolumnComparator, 
comment, rowCacheSize, preloadRowCache, keyCacheSize, 
DEFAULT_READ_REPAIR_CHANCE, nextId());
     }
 
-    public CFMetaData(String tableName, String cfName, String columnType, 
AbstractType comparator, AbstractType subcolumnComparator, String comment, 
double rowCacheSize, boolean preloadRowCache, double keyCacheSize, double 
readRepairChance)
+    public CFMetaData(String tableName, String cfName, ColumnFamilyType 
cfType, AbstractType comparator, AbstractType subcolumnComparator, String 
comment, double rowCacheSize, boolean preloadRowCache, double keyCacheSize, 
double readRepairChance)
     {
-        this(tableName, cfName, columnType, comparator, subcolumnComparator, 
comment, rowCacheSize, preloadRowCache, keyCacheSize, readRepairChance, 
nextId());
+        this(tableName, cfName, cfType, comparator, subcolumnComparator, 
comment, rowCacheSize, preloadRowCache, keyCacheSize, readRepairChance, 
nextId());
     }
 
     /** clones an existing CFMetaData using the same id. */
     public static CFMetaData rename(CFMetaData cfm, String newName)
     {
-        CFMetaData newCfm = new CFMetaData(cfm.tableName, newName, 
cfm.columnType, cfm.comparator, cfm.subcolumnComparator, cfm.comment, 
cfm.rowCacheSize, cfm.preloadRowCache, cfm.keyCacheSize, cfm.readRepairChance, 
cfm.cfId);
+        CFMetaData newCfm = new CFMetaData(cfm.tableName, newName, cfm.cfType, 
cfm.comparator, cfm.subcolumnComparator, cfm.comment, cfm.rowCacheSize, 
cfm.preloadRowCache, cfm.keyCacheSize, cfm.readRepairChance, cfm.cfId);
         return newCfm;
     }
     
     /** clones existing CFMetaData. keeps the id but changes the table name.*/
     public static CFMetaData renameTable(CFMetaData cfm, String tableName)
     {
-        return new CFMetaData(tableName, cfm.cfName, cfm.columnType, 
cfm.comparator, cfm.subcolumnComparator, cfm.comment, cfm.rowCacheSize, 
cfm.preloadRowCache, cfm.keyCacheSize, cfm.readRepairChance, cfm.cfId);
+        return new CFMetaData(tableName, cfm.cfName, cfm.cfType, 
cfm.comparator, cfm.subcolumnComparator, cfm.comment, cfm.rowCacheSize, 
cfm.preloadRowCache, cfm.keyCacheSize, cfm.readRepairChance, cfm.cfId);
     }
     
     /** used for evicting cf data out of static tracking collections. */
@@ -143,7 +144,7 @@ public final class CFMetaData
     public String pretty()
     {
         return tableName + "." + cfName + "\n"
-               + "Column Family Type: " + columnType + "\n"
+               + "Column Family Type: " + cfType + "\n"
                + "Columns Sorted By: " + comparator + "\n";
     }
 
@@ -153,7 +154,7 @@ public final class CFMetaData
         DataOutputStream dout = new DataOutputStream(bout);
         dout.writeUTF(cfm.tableName);
         dout.writeUTF(cfm.cfName);
-        dout.writeUTF(cfm.columnType);
+        dout.writeUTF(cfm.cfType.name());
         dout.writeUTF(cfm.comparator.getClass().getName());
         dout.writeBoolean(cfm.subcolumnComparator != null);
         if (cfm.subcolumnComparator != null)
@@ -175,7 +176,7 @@ public final class CFMetaData
         DataInputStream din = new DataInputStream(in);
         String tableName = din.readUTF();
         String cfName = din.readUTF();
-        String columnType = din.readUTF();
+        ColumnFamilyType cfType = ColumnFamilyType.create(din.readUTF());
         AbstractType comparator = null;
         try
         {
@@ -200,7 +201,7 @@ public final class CFMetaData
         double keyCacheSize = din.readDouble();
         double readRepairChance = din.readDouble();
         int cfId = din.readInt();
-        return new CFMetaData(tableName, cfName, columnType, comparator, 
subcolumnComparator, comment, rowCacheSize, preloadRowCache, keyCacheSize, 
readRepairChance, cfId);
+        return new CFMetaData(tableName, cfName, cfType, comparator, 
subcolumnComparator, comment, rowCacheSize, preloadRowCache, keyCacheSize, 
readRepairChance, cfId);
     }
     
 
@@ -219,7 +220,7 @@ public final class CFMetaData
         return new EqualsBuilder()
             .append(tableName, rhs.tableName)
             .append(cfName, rhs.cfName)
-            .append(columnType, rhs.columnType)
+            .append(cfType, rhs.cfType)
             .append(comparator, rhs.comparator)
             .append(subcolumnComparator, rhs.subcolumnComparator)
             .append(comment, rhs.comment)
@@ -235,7 +236,7 @@ public final class CFMetaData
         return new HashCodeBuilder(29, 1597)
             .append(tableName)
             .append(cfName)
-            .append(columnType)
+            .append(cfType)
             .append(comparator)
             .append(subcolumnComparator)
             .append(comment)

Modified: cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java Fri 
May  7 15:13:44 2010
@@ -1,8 +1,10 @@
 package org.apache.cassandra.config;
 
+import org.apache.cassandra.db.ColumnFamilyType;
+
 public class ColumnFamily {
     public String name;            
-    public String column_type;
+    public ColumnFamilyType column_type;
     public String compare_with;
     public String compare_subcolumns_with;
     public String comment;

Modified: cassandra/trunk/src/java/org/apache/cassandra/config/Converter.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/Converter.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/Converter.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/Converter.java Fri May 
 7 15:13:44 2010
@@ -13,6 +13,7 @@ import javax.xml.xpath.XPathExpressionEx
 
 import org.apache.cassandra.utils.FBUtilities;
 import org.apache.cassandra.utils.XMLUtils;
+import org.apache.cassandra.db.ColumnFamilyType;
 import org.w3c.dom.NodeList;
 import org.w3c.dom.Node;
 import org.xml.sax.SAXException;
@@ -67,10 +68,10 @@ public class Converter {
                     ks.column_families[j] = new ColumnFamily();
                     ks.column_families[j].name = 
XMLUtils.getAttributeValue(columnFamily, "Name");
                     String xqlCF = xqlTable + "columnfami...@name='" + 
ks.column_families[j].name + "']/";
-                    ks.column_families[j].column_type = 
XMLUtils.getAttributeValue(columnFamily, "ColumnType");
+                    ks.column_families[j].column_type = 
ColumnFamilyType.create(XMLUtils.getAttributeValue(columnFamily, "ColumnType"));
                     ks.column_families[j].compare_with = 
XMLUtils.getAttributeValue(columnFamily, "CompareWith");
                     
-                    if (ks.column_families[j].column_type != null && 
ks.column_families[j].column_type.equals("Super"))
+                    if (ks.column_families[j].column_type != null && 
ks.column_families[j].column_type == ColumnFamilyType.Super)
                         ks.column_families[j].compare_subcolumns_with = 
XMLUtils.getAttributeValue(columnFamily, "CompareSubcolumnsWith");
                     
                     if ((value = XMLUtils.getAttributeValue(columnFamily, 
"KeysCached")) != null)

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=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java 
Fri May  7 15:13:44 2010
@@ -281,7 +281,7 @@ public class DatabaseDescriptor
             {
                 new CFMetaData(Table.SYSTEM_TABLE,
                                SystemTable.STATUS_CF,
-                               "Standard",
+                               ColumnFamilyType.Standard,
                                new UTF8Type(),
                                null,
                                "persistent metadata for the local node",
@@ -290,7 +290,7 @@ public class DatabaseDescriptor
                                0.01),
                 new CFMetaData(Table.SYSTEM_TABLE,
                                HintedHandOffManager.HINTS_CF,
-                               "Super",
+                               ColumnFamilyType.Super,
                                new UTF8Type(),
                                new BytesType(),
                                "hinted handoff data",
@@ -305,8 +305,8 @@ public class DatabaseDescriptor
                 
             CFMetaData[] definitionCfDefs = new CFMetaData[]
             {
-                new CFMetaData(Table.DEFINITIONS, Migration.MIGRATIONS_CF, 
"Standard", new TimeUUIDType(), null, "individual schema mutations", 0, false, 
0),
-                new CFMetaData(Table.DEFINITIONS, Migration.SCHEMA_CF, 
"Standard", new UTF8Type(), null, "current state of the schema", 0, false, 0)
+                new CFMetaData(Table.DEFINITIONS, Migration.MIGRATIONS_CF, 
ColumnFamilyType.Standard, new TimeUUIDType(), null, "individual schema 
mutations", 0, false, 0),
+                new CFMetaData(Table.DEFINITIONS, Migration.SCHEMA_CF, 
ColumnFamilyType.Standard, new UTF8Type(), null, "current state of the schema", 
0, false, 0)
             };
             CFMetaData.map(definitionCfDefs[0]);
             CFMetaData.map(definitionCfDefs[1]);
@@ -484,16 +484,11 @@ public class DatabaseDescriptor
                     throw new ConfigurationException("ColumnFamily names 
cannot contain hyphens");
                 }
                 
-                String columnType = 
org.apache.cassandra.db.ColumnFamily.getColumnType(cf.column_type);
-                if (columnType == null)
-                {
-                    throw new ConfigurationException("ColumnFamily " + cf.name 
+ " has invalid type " + cf.column_type);
-                }
-                
                 // Parse out the column comparator
                 AbstractType comparator = getComparator(cf.compare_with);
                 AbstractType subcolumnComparator = null;
-                if (columnType.equals("Super"))
+                ColumnFamilyType cfType = cf.column_type == null ? 
ColumnFamilyType.Standard : cf.column_type;
+                if (cfType == ColumnFamilyType.Super)
                 {
                     subcolumnComparator = 
getComparator(cf.compare_subcolumns_with);
                 }
@@ -506,7 +501,7 @@ public class DatabaseDescriptor
                 {                        
                     throw new ConfigurationException("read_repair_chance must 
be between 0.0 and 1.0");
                 }
-                cfDefs[j++] = new CFMetaData(keyspace.name, cf.name, 
columnType, comparator, subcolumnComparator, cf.comment, cf.rows_cached, 
cf.preload_row_cache, cf.keys_cached, cf.read_repair_chance);
+                cfDefs[j++] = new CFMetaData(keyspace.name, cf.name, cfType, 
comparator, subcolumnComparator, cf.comment, cf.rows_cached, 
cf.preload_row_cache, cf.keys_cached, cf.read_repair_chance);
             }
             defs.add(new KSMetaData(keyspace.name, strategyClass, 
keyspace.replication_factor, cfDefs));
             
@@ -691,14 +686,14 @@ public class DatabaseDescriptor
         return ksm.cfMetaData().get(cfName);
     }
     
-    public static String getColumnType(String tableName, String cfName)
+    public static ColumnFamilyType getColumnFamilyType(String tableName, 
String cfName)
     {
-        assert tableName != null;
+        assert tableName != null && cfName != null;
         CFMetaData cfMetaData = getCFMetaData(tableName, cfName);
         
         if (cfMetaData == null)
             return null;
-        return cfMetaData.columnType;
+        return cfMetaData.cfType;
     }
 
     public static Set<String> getTables()
@@ -800,15 +795,6 @@ public class DatabaseDescriptor
         return seeds;
     }
 
-    public static String getColumnFamilyType(String tableName, String cfName)
-    {
-        assert tableName != null;
-        String cfType = getColumnType(tableName, cfName);
-        if ( cfType == null )
-            cfType = "Standard";
-       return cfType;
-    }
-
     /*
      * Loop through all the disks to see which disk has the max free space
      * return the disk with max free space for compactions. If the size of the 
expected

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamily.java Fri May  
7 15:13:44 2010
@@ -46,35 +46,20 @@ public class ColumnFamily implements ICo
     private static ColumnFamilySerializer serializer_ = new 
ColumnFamilySerializer();
 
     private static Logger logger_ = LoggerFactory.getLogger( 
ColumnFamily.class );
-    private static Map<String, String> columnTypes_ = new HashMap<String, 
String>();
-    String type_;
-
-    static
-    {
-        /* TODO: These are the various column types. Hard coded for now. */
-        columnTypes_.put("Standard", "Standard");
-        columnTypes_.put("Super", "Super");
-    }
+    ColumnFamilyType type_;
 
     public static ColumnFamilySerializer serializer()
     {
         return serializer_;
     }
 
-    public static String getColumnType(String key)
-    {
-       if ( key == null )
-               return columnTypes_.get("Standard");
-       return columnTypes_.get(key);
-    }
-
     public static ColumnFamily create(String tableName, String cfName)
     {
-        String columnType = DatabaseDescriptor.getColumnFamilyType(tableName, 
cfName);
+        ColumnFamilyType cfType = 
DatabaseDescriptor.getColumnFamilyType(tableName, cfName);
         AbstractType comparator = DatabaseDescriptor.getComparator(tableName, 
cfName);
         AbstractType subcolumnComparator = 
DatabaseDescriptor.getSubComparator(tableName, cfName);
         int id = CFMetaData.getId(tableName, cfName);
-        return new ColumnFamily(cfName, columnType, comparator, 
subcolumnComparator, id);
+        return new ColumnFamily(cfName, cfType, comparator, 
subcolumnComparator, id);
     }
 
     private String name_;
@@ -85,11 +70,11 @@ public class ColumnFamily implements ICo
     AtomicInteger localDeletionTime = new AtomicInteger(Integer.MIN_VALUE);
     private ConcurrentSkipListMap<byte[], IColumn> columns_;
 
-    public ColumnFamily(String cfName, String columnType, AbstractType 
comparator, AbstractType subcolumnComparator, int id)
+    public ColumnFamily(String cfName, ColumnFamilyType cfType, AbstractType 
comparator, AbstractType subcolumnComparator, int id)
     {
         name_ = cfName;
-        type_ = columnType;
-        columnSerializer_ = columnType.equals("Standard") ? 
Column.serializer() : SuperColumn.serializer(subcolumnComparator);
+        type_ = cfType;
+        columnSerializer_ = cfType == ColumnFamilyType.Standard ? 
Column.serializer() : SuperColumn.serializer(subcolumnComparator);
         columns_ = new ConcurrentSkipListMap<byte[], IColumn>(comparator);
         id_ = id;
     }
@@ -113,6 +98,11 @@ public class ColumnFamily implements ICo
         return (columnSerializer_ instanceof SuperColumnSerializer) ? 
((SuperColumnSerializer)columnSerializer_).getComparator() : null;
     }
 
+    public ColumnFamilyType getColumnFamilyType()
+    {
+        return type_;
+    }
+
     public ColumnFamily cloneMe()
     {
         ColumnFamily cf = cloneMeShallow();
@@ -151,7 +141,7 @@ public class ColumnFamily implements ICo
     int getColumnCount()
     {
        int count = 0;
-        if(!isSuper())
+        if(type_ == ColumnFamilyType.Standard)
         {
             count = columns_.size();
         }
@@ -167,7 +157,7 @@ public class ColumnFamily implements ICo
 
     public boolean isSuper()
     {
-        return type_.equals("Super");
+        return type_ == ColumnFamilyType.Super;
     }
 
     public void addColumn(QueryPath path, byte[] value, long timestamp)
@@ -415,11 +405,6 @@ public class ColumnFamily implements ICo
         return localDeletionTime.get();
     }
 
-    public String type()
-    {
-        return type_;
-    }
-
     String getComparatorName()
     {
         return getComparator().getClass().getCanonicalName();

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java 
(original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilySerializer.java 
Fri May  7 15:13:44 2010
@@ -63,7 +63,7 @@ public class ColumnFamilySerializer impl
 
             dos.writeUTF(columnFamily.name());
             dos.writeInt(columnFamily.id());
-            dos.writeUTF(columnFamily.type_);
+            dos.writeUTF(columnFamily.type_.name());
             dos.writeUTF(columnFamily.getComparatorName());
             dos.writeUTF(columnFamily.getSubComparatorName());
         }
@@ -106,7 +106,8 @@ public class ColumnFamilySerializer impl
         if (cfName.isEmpty())
             return null;
         int id = dis.readInt();
-        ColumnFamily cf = deserializeFromSSTableNoColumns(cfName, 
dis.readUTF(), readComparator(dis), readComparator(dis), id, dis);
+        ColumnFamilyType cfType = ColumnFamilyType.create(dis.readUTF());
+        ColumnFamily cf = deserializeFromSSTableNoColumns(cfName, cfType, 
readComparator(dis), readComparator(dis), id, dis);
         deserializeColumns(dis, cf);
         return cf;
     }
@@ -143,7 +144,7 @@ public class ColumnFamilySerializer impl
         }
     }
 
-    private ColumnFamily deserializeFromSSTableNoColumns(String name, String 
type, AbstractType comparator, AbstractType subComparator, int id, DataInput 
input) throws IOException
+    private ColumnFamily deserializeFromSSTableNoColumns(String name, 
ColumnFamilyType type, AbstractType comparator, AbstractType subComparator, int 
id, DataInput input) throws IOException
     {
         ColumnFamily cf = new ColumnFamily(name, type, comparator, 
subComparator, id);
         return deserializeFromSSTableNoColumns(cf, input);

Added: cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyType.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyType.java?rev=942113&view=auto
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyType.java 
(added)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/ColumnFamilyType.java Fri 
May  7 15:13:44 2010
@@ -0,0 +1,39 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.cassandra.db;
+
+/**
+ * column family type enum
+ */
+public enum ColumnFamilyType
+{
+    Standard,
+    Super;
+
+    public final static ColumnFamilyType create(String name)
+    {
+        try
+        {
+            return name == null ? null : ColumnFamilyType.valueOf(name);
+        }
+        catch (IllegalArgumentException e)
+        {
+            return null;
+        }
+    }
+}

Modified: cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/db/RowMutation.java Fri May  
7 15:13:44 2010
@@ -310,7 +310,7 @@ public class RowMutation
         {
             for(byte[] c : del.predicate.column_names)
             {
-                if (del.super_column == null && 
DatabaseDescriptor.getColumnFamilyType(rm.table_, cfName).equals("Super"))
+                if (del.super_column == null && 
DatabaseDescriptor.getColumnFamilyType(rm.table_, cfName) == 
ColumnFamilyType.Super)
                     rm.delete(new QueryPath(cfName, c), del.timestamp);
                 else
                     rm.delete(new QueryPath(cfName, del.super_column, c), 
del.timestamp);

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/io/sstable/SSTableReader.java 
Fri May  7 15:13:44 2010
@@ -275,7 +275,8 @@ public abstract class SSTableReader exte
 
     public ICompactSerializer2<IColumn> getColumnSerializer()
     {
-        return DatabaseDescriptor.getColumnFamilyType(getTableName(), 
getColumnFamilyName()).equals("Standard")
+        ColumnFamilyType cfType = 
DatabaseDescriptor.getColumnFamilyType(getTableName(), getColumnFamilyName());
+        return cfType == ColumnFamilyType.Standard
                ? Column.serializer()
                : SuperColumn.serializer(getColumnComparator());
     }

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/CassandraServer.java 
Fri May  7 15:13:44 2010
@@ -489,10 +489,10 @@ public class CassandraServer implements 
             CFMetaData columnFamilyMetaData = stringCFMetaDataEntry.getValue();
 
             Map<String, String> columnMap = new HashMap<String, String>();
-            columnMap.put("Type", columnFamilyMetaData.columnType);
+            columnMap.put("Type", columnFamilyMetaData.cfType.name());
             columnMap.put("Desc", columnFamilyMetaData.comment == null ? 
columnFamilyMetaData.pretty() : columnFamilyMetaData.comment);
             columnMap.put("CompareWith", 
columnFamilyMetaData.comparator.getClass().getName());
-            if (columnFamilyMetaData.columnType.equals("Super"))
+            if (columnFamilyMetaData.cfType == ColumnFamilyType.Super)
             {
                 columnMap.put("CompareSubcolumnsWith", 
columnFamilyMetaData.subcolumnComparator.getClass().getName());
             }
@@ -651,10 +651,15 @@ public class CassandraServer implements 
         
         try
         {
+            ColumnFamilyType cfType = 
ColumnFamilyType.create(cf_def.column_type);
+            if (cfType == null)
+            {
+              throw new InvalidRequestException("Invalid column type " + 
cf_def.column_type);
+            }
             CFMetaData cfm = new CFMetaData(
                         cf_def.table,
                         cf_def.name,
-                        ColumnFamily.getColumnType(cf_def.column_type),
+                        cfType,
                         
DatabaseDescriptor.getComparator(cf_def.comparator_type),
                         cf_def.subcomparator_type.length() == 0 ? null : 
DatabaseDescriptor.getComparator(cf_def.subcomparator_type),
                         cf_def.comment,
@@ -752,10 +757,15 @@ public class CassandraServer implements 
             Collection<CFMetaData> cfDefs = new 
ArrayList<CFMetaData>(ks_def.cf_defs.size());
             for (CfDef cfDef : ks_def.cf_defs)
             {
+                ColumnFamilyType cfType = 
ColumnFamilyType.create(cfDef.column_type);
+                if (cfType == null)
+                {
+                    throw new InvalidRequestException("Invalid column type " + 
cfDef.column_type);
+                }
                 CFMetaData cfm = new CFMetaData(
                         cfDef.table,
                         cfDef.name,
-                        ColumnFamily.getColumnType(cfDef.column_type),
+                        cfType,
                         
DatabaseDescriptor.getComparator(cfDef.comparator_type),
                         cfDef.subcomparator_type.length() == 0 ? null : 
DatabaseDescriptor.getComparator(cfDef.subcomparator_type),
                         cfDef.comment,

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/thrift/ThriftValidation.java 
Fri May  7 15:13:44 2010
@@ -26,6 +26,7 @@ import java.util.Arrays;
 import org.apache.cassandra.db.KeyspaceNotDefinedException;
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.IColumn;
+import org.apache.cassandra.db.ColumnFamilyType;
 import org.apache.cassandra.db.marshal.AbstractType;
 import org.apache.cassandra.db.marshal.MarshalException;
 
@@ -60,13 +61,13 @@ public class ThriftValidation
         }
     }
 
-    public static String validateColumnFamily(String tablename, String cfName) 
throws InvalidRequestException
+    public static ColumnFamilyType validateColumnFamily(String tablename, 
String cfName) throws InvalidRequestException
     {
         if (cfName.isEmpty())
         {
             throw new InvalidRequestException("non-empty columnfamily is 
required");
         }
-        String cfType = DatabaseDescriptor.getColumnType(tablename, cfName);
+        ColumnFamilyType cfType = 
DatabaseDescriptor.getColumnFamilyType(tablename, cfName);
         if (cfType == null)
         {
             throw new InvalidRequestException("unconfigured columnfamily " + 
cfName);
@@ -77,8 +78,8 @@ public class ThriftValidation
     static void validateColumnPath(String tablename, ColumnPath column_path) 
throws InvalidRequestException
     {
         validateTable(tablename);
-        String cfType = validateColumnFamily(tablename, 
column_path.column_family);
-        if (cfType.equals("Standard"))
+        ColumnFamilyType cfType = validateColumnFamily(tablename, 
column_path.column_family);
+        if (cfType == ColumnFamilyType.Standard)
         {
             if (column_path.super_column != null)
             {
@@ -107,8 +108,8 @@ public class ThriftValidation
     static void validateColumnParent(String tablename, ColumnParent 
column_parent) throws InvalidRequestException
     {
         validateTable(tablename);
-        String cfType = validateColumnFamily(tablename, 
column_parent.column_family);
-        if (cfType.equals("Standard"))
+        ColumnFamilyType cfType = validateColumnFamily(tablename, 
column_parent.column_family);
+        if (cfType == ColumnFamilyType.Standard)
         {
             if (column_parent.super_column != null)
             {
@@ -125,8 +126,8 @@ public class ThriftValidation
     static void validateColumnPathOrParent(String tablename, ColumnPath 
column_path_or_parent) throws InvalidRequestException
     {
         validateTable(tablename);
-        String cfType = validateColumnFamily(tablename, 
column_path_or_parent.column_family);
-        if (cfType.equals("Standard"))
+        ColumnFamilyType cfType = validateColumnFamily(tablename, 
column_path_or_parent.column_family);
+        if (cfType == ColumnFamilyType.Standard)
         {
             if (column_path_or_parent.super_column != null)
             {
@@ -152,7 +153,7 @@ public class ThriftValidation
                 throw new InvalidRequestException("supercolumn name length 
must not be greater than " + IColumn.MAX_NAME_LENGTH);
             if (superColumnName.length == 0)
                 throw new InvalidRequestException("supercolumn name must not 
be empty");
-            if (!DatabaseDescriptor.getColumnFamilyType(keyspace, 
columnFamilyName).equals("Super"))
+            if (DatabaseDescriptor.getColumnFamilyType(keyspace, 
columnFamilyName) == ColumnFamilyType.Standard)
                 throw new InvalidRequestException("supercolumn specified to 
ColumnFamily " + columnFamilyName + " containing normal columns");
         }
         AbstractType comparator = ColumnFamily.getComparatorFor(keyspace, 
columnFamilyName, superColumnName);

Modified: cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java 
(original)
+++ cassandra/trunk/src/java/org/apache/cassandra/tools/SSTableImport.java Fri 
May  7 15:13:44 2010
@@ -25,6 +25,7 @@ import org.apache.cassandra.config.Datab
 import org.apache.cassandra.db.ColumnFamily;
 import org.apache.cassandra.db.DecoratedKey;
 import org.apache.cassandra.db.SuperColumn;
+import org.apache.cassandra.db.ColumnFamilyType;
 import org.apache.cassandra.db.filter.QueryPath;
 import org.apache.cassandra.dht.IPartitioner;
 import org.apache.cassandra.io.util.DataOutputBuffer;
@@ -142,7 +143,7 @@ public class SSTableImport
     throws IOException, ParseException
     {
         ColumnFamily cfamily = ColumnFamily.create(keyspace, cf);
-        String cfType = cfamily.type();    // Super or Standard
+        ColumnFamilyType cfType = cfamily.getColumnFamilyType();    // Super 
or Standard
         IPartitioner<?> partitioner = DatabaseDescriptor.getPartitioner();
         DataOutputBuffer dob = new DataOutputBuffer();
         
@@ -159,7 +160,7 @@ public class SSTableImport
 
             for (Map.Entry<DecoratedKey, String> rowKey : 
decoratedKeys.entrySet())
             {
-                if (cfType.equals("Super"))
+                if (cfType == ColumnFamilyType.Super)
                     addToSuperCF((JSONObject)json.get(rowKey.getValue()), 
cfamily);
                 else
                     addToStandardCF((JSONArray)json.get(rowKey.getValue()), 
cfamily);

Modified: cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java?rev=942113&r1=942112&r2=942113&view=diff
==============================================================================
--- cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java (original)
+++ cassandra/trunk/test/unit/org/apache/cassandra/db/DefsTest.java Fri May  7 
15:13:44 2010
@@ -79,7 +79,7 @@ public class DefsTest extends CleanupHel
     @Test
     public void addNewCfToBogusTable() throws InterruptedException
     {
-        CFMetaData newCf = new CFMetaData("MadeUpKeyspace", "NewCF", 
"Standard", new UTF8Type(), null, "new cf", 0, false, 0);
+        CFMetaData newCf = new CFMetaData("MadeUpKeyspace", "NewCF", 
ColumnFamilyType.Standard, new UTF8Type(), null, "new cf", 0, false, 0);
         try
         {
             new AddColumnFamily(newCf).apply();
@@ -104,7 +104,7 @@ public class DefsTest extends CleanupHel
         assert DatabaseDescriptor.getDefsVersion().equals(prior);
         
         // add a cf.
-        CFMetaData newCf1 = new CFMetaData("Keyspace1", "MigrationCf_1", 
"Standard", new UTF8Type(), null, "Migration CF ", 0, false, 0);
+        CFMetaData newCf1 = new CFMetaData("Keyspace1", "MigrationCf_1", 
ColumnFamilyType.Standard, new UTF8Type(), null, "Migration CF ", 0, false, 0);
         Migration m1 = new AddColumnFamily(newCf1);
         m1.apply();
         UUID ver1 = m1.getVersion();
@@ -163,7 +163,7 @@ public class DefsTest extends CleanupHel
         final String cf = "BrandNewCf";
         KSMetaData original = DatabaseDescriptor.getTableDefinition(ks);
 
-        CFMetaData newCf = new CFMetaData(original.name, cf, "Standard", new 
UTF8Type(), null, "A New Column Family", 0, false, 0);
+        CFMetaData newCf = new CFMetaData(original.name, cf, 
ColumnFamilyType.Standard, new UTF8Type(), null, "A New Column Family", 0, 
false, 0);
         int clSegments = CommitLog.instance().getSegmentCount();
         assert 
!DatabaseDescriptor.getTableDefinition(ks).cfMetaData().containsKey(newCf.cfName);
         new AddColumnFamily(newCf).apply();
@@ -279,7 +279,7 @@ public class DefsTest extends CleanupHel
     public void addNewKS() throws ConfigurationException, IOException, 
ExecutionException, InterruptedException
     {
         DecoratedKey dk = Util.dk("key0");
-        CFMetaData newCf = new CFMetaData("NewKeyspace1", "AddedStandard1", 
"Standard", new UTF8Type(), null, "A new cf for a new ks", 0, false, 0);
+        CFMetaData newCf = new CFMetaData("NewKeyspace1", "AddedStandard1", 
ColumnFamilyType.Standard, new UTF8Type(), null, "A new cf for a new ks", 0, 
false, 0);
         KSMetaData newKs = new KSMetaData(newCf.tableName, 
RackUnawareStrategy.class, 5, newCf);
         
         int segmentCount = CommitLog.instance().getSegmentCount();


Reply via email to