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