diff --git a/src/org/apache/cassandra/db/ColumnFamily.java b/src/org/apache/cassandra/db/ColumnFamily.java index 7e4fcac755..ec0a80c2c0 100644 --- a/src/org/apache/cassandra/db/ColumnFamily.java +++ b/src/org/apache/cassandra/db/ColumnFamily.java @@ -49,6 +49,7 @@ public final class ColumnFamily private static Logger logger_ = Logger.getLogger( ColumnFamily.class ); private static Map columnTypes_ = new HashMap(); private static Map indexTypes_ = new HashMap(); + private String type_; static { @@ -122,15 +123,10 @@ public final class ColumnFamily return columnComparator_; } - public ColumnFamily(String cfName) - { - name_ = cfName; - createColumnFactoryAndColumnSerializer(); - } - public ColumnFamily(String cfName, String columnType) { - this(cfName); + name_ = cfName; + type_ = columnType; createColumnFactoryAndColumnSerializer(columnType); } @@ -162,7 +158,7 @@ public final class ColumnFamily ColumnFamily cloneMe() { - ColumnFamily cf = new ColumnFamily(name_); + ColumnFamily cf = new ColumnFamily(name_, type_); cf.markedForDeleteAt = markedForDeleteAt; cf.columns_ = columns_.cloneMe(); return cf; @@ -220,7 +216,7 @@ public final class ColumnFamily public boolean isSuper() { - return DatabaseDescriptor.getColumnType(name_).equals("Super"); + return type_.equals("Super"); } public void addColumn(String name, byte[] value) @@ -329,7 +325,7 @@ public final class ColumnFamily */ ColumnFamily diff(ColumnFamily columnFamily) { - ColumnFamily cfDiff = new ColumnFamily(columnFamily.name()); + ColumnFamily cfDiff = new ColumnFamily(columnFamily.name(), columnFamily.type_); Map columns = columnFamily.getColumns(); Set cNames = columns.keySet(); @@ -421,6 +417,11 @@ public final class ColumnFamily return markedForDeleteAt; } + public String type() + { + return type_; + } + public static class ColumnFamilySerializer implements ICompactSerializer2 { /* @@ -473,7 +474,7 @@ public final class ColumnFamily private ColumnFamily defreezeColumnFamily(DataInputStream dis) throws IOException { String name = dis.readUTF(); - ColumnFamily cf = new ColumnFamily(name); + ColumnFamily cf = new ColumnFamily(name, DatabaseDescriptor.getColumnFamilyType(name)); cf.delete(dis.readLong()); return cf; } diff --git a/src/org/apache/cassandra/db/ColumnFamilyStore.java b/src/org/apache/cassandra/db/ColumnFamilyStore.java index 9464c304eb..b20af678e3 100644 --- a/src/org/apache/cassandra/db/ColumnFamilyStore.java +++ b/src/org/apache/cassandra/db/ColumnFamilyStore.java @@ -70,8 +70,9 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean private static int compactionMemoryThreshold_ = 1 << 30; private static Logger logger_ = Logger.getLogger(ColumnFamilyStore.class); - private String table_; - public String columnFamily_; + private final String table_; + public final String columnFamily_; + private final boolean isSuper_; private volatile Integer memtableSwitchCount = 0; @@ -91,10 +92,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean /* Flag indicates if a compaction is in process */ private AtomicBoolean isCompacting_ = new AtomicBoolean(false); - ColumnFamilyStore(String table, String columnFamily, int indexValue) throws IOException + ColumnFamilyStore(String table, String columnFamily, boolean isSuper, int indexValue) throws IOException { table_ = table; columnFamily_ = columnFamily; + isSuper_ = isSuper; fileIndexGenerator_.set(indexValue); memtable_ = new AtomicReference(new Memtable(table_, columnFamily_)); binaryMemtable_ = new AtomicReference(new BinaryMemtable(table_, columnFamily_)); @@ -130,7 +132,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean Collections.sort(indices); int value = (indices.size() > 0) ? (indices.get(indices.size() - 1)) : 0; - ColumnFamilyStore cfs = new ColumnFamilyStore(table, columnFamily, value); + ColumnFamilyStore cfs = new ColumnFamilyStore(table, columnFamily, "Super".equals(DatabaseDescriptor.getColumnType(columnFamily)), value); MBeanServer mbs = ManagementFactory.getPlatformMBeanServer(); try @@ -579,8 +581,8 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean return null; // start from nothing so that we don't include potential deleted columns from the first instance - String cfname = columnFamilies.get(0).name(); - ColumnFamily cf = new ColumnFamily(cfname); + ColumnFamily cf0 = columnFamilies.get(0); + ColumnFamily cf = new ColumnFamily(cf0.name(), cf0.type()); // merge for (ColumnFamily cf2 : columnFamilies) @@ -1383,7 +1385,7 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean public boolean isSuper() { - return DatabaseDescriptor.getColumnType(getColumnFamilyName()).equals("Super"); + return isSuper_; } public void flushMemtableOnRecovery() throws IOException diff --git a/src/org/apache/cassandra/db/CountFilter.java b/src/org/apache/cassandra/db/CountFilter.java index 25a88db607..02a31f549b 100644 --- a/src/org/apache/cassandra/db/CountFilter.java +++ b/src/org/apache/cassandra/db/CountFilter.java @@ -49,8 +49,7 @@ public class CountFilter implements IFilter if ( columnFamily == null ) return columnFamily; - String cfName = columnFamily.name(); - ColumnFamily filteredCf = new ColumnFamily(cfName); + ColumnFamily filteredCf = new ColumnFamily(columnFamily.name(), columnFamily.type()); if( countLimit_ <= 0 ) { isDone_ = true; diff --git a/src/org/apache/cassandra/db/DBManager.java b/src/org/apache/cassandra/db/DBManager.java index 53cb170313..310e8e043b 100644 --- a/src/org/apache/cassandra/db/DBManager.java +++ b/src/org/apache/cassandra/db/DBManager.java @@ -130,7 +130,7 @@ public class DBManager String key = FBUtilities.getHostName(); row = new Row(key); - ColumnFamily cf = new ColumnFamily(SystemTable.cfName_); + ColumnFamily cf = new ColumnFamily(SystemTable.cfName_, "Standard"); cf.addColumn(new Column(SystemTable.token_, token.toByteArray())); cf.addColumn(new Column(SystemTable.generation_, BasicUtilities.intToByteArray(generation))); row.addColumnFamily(cf); diff --git a/src/org/apache/cassandra/db/IdentityFilter.java b/src/org/apache/cassandra/db/IdentityFilter.java index 00df151e74..9a3477a2a0 100644 --- a/src/org/apache/cassandra/db/IdentityFilter.java +++ b/src/org/apache/cassandra/db/IdentityFilter.java @@ -25,13 +25,13 @@ public class IdentityFilter implements IFilter if( columnFamily == null ) return columnFamily; String cfName = columnFamily.name(); - if ( values.length == 2 && !DatabaseDescriptor.getColumnType(cfName).equals("Super") ) + if (values.length == 2 && !columnFamily.isSuper()) { Collection columns = columnFamily.getAllColumns(); if(columns.size() >= 1) isDone_ = true; } - if ( values.length == 3 && DatabaseDescriptor.getColumnType(cfName).equals("Super")) + if (values.length == 3 && columnFamily.isSuper()) { Collection columns = columnFamily.getAllColumns(); for(IColumn column : columns) diff --git a/src/org/apache/cassandra/db/Memtable.java b/src/org/apache/cassandra/db/Memtable.java index 42469cda97..33bb98a3bf 100644 --- a/src/org/apache/cassandra/db/Memtable.java +++ b/src/org/apache/cassandra/db/Memtable.java @@ -314,7 +314,7 @@ public class Memtable implements Comparable IColumn column = cFamily.getColumn(values[1]); // super or normal column if (column != null ) { - columnFamily = new ColumnFamily(cfName_); + columnFamily = new ColumnFamily(cfName_, cFamily.type()); columnFamily.addColumn(column); } } @@ -327,7 +327,7 @@ public class Memtable implements Comparable IColumn subColumn = superColumn.getSubColumn(values[2]); if (subColumn != null) { - columnFamily = new ColumnFamily(cfName_); + columnFamily = new ColumnFamily(cfName_, cFamily.type()); columnFamily.addColumn(values[1] + ":" + values[2], subColumn.value(), subColumn.timestamp(), subColumn.isMarkedForDelete()); } } diff --git a/src/org/apache/cassandra/db/NamesFilter.java b/src/org/apache/cassandra/db/NamesFilter.java index 0af19ec666..e78035c9ba 100644 --- a/src/org/apache/cassandra/db/NamesFilter.java +++ b/src/org/apache/cassandra/db/NamesFilter.java @@ -46,8 +46,7 @@ public class NamesFilter implements IFilter return columnFamily; } String[] values = RowMutation.getColumnAndColumnFamily(cf); - String cfName = columnFamily.name(); - ColumnFamily filteredCf = new ColumnFamily(cfName); + ColumnFamily filteredCf = new ColumnFamily(columnFamily.name(), columnFamily.type()); if( values.length == 1 ) { Collection columns = columnFamily.getAllColumns(); @@ -64,7 +63,7 @@ public class NamesFilter implements IFilter } } } - else if ( values.length == 2 && DatabaseDescriptor.getColumnType(cfName).equals("Super")) + else if (values.length == 2 && columnFamily.isSuper()) { Collection columns = columnFamily.getAllColumns(); for(IColumn column : columns) diff --git a/src/org/apache/cassandra/db/RangeFilter.java b/src/org/apache/cassandra/db/RangeFilter.java index d49d7b560c..43fa8d29ba 100644 --- a/src/org/apache/cassandra/db/RangeFilter.java +++ b/src/org/apache/cassandra/db/RangeFilter.java @@ -63,7 +63,7 @@ public class RangeFilter implements IFilter return null; } - ColumnFamily filteredColumnFamily = new ColumnFamily(cfName); + ColumnFamily filteredColumnFamily = new ColumnFamily(cfName, cf.type()); Collection columns = cf.getAllColumns(); for (IColumn c : columns) diff --git a/src/org/apache/cassandra/db/Row.java b/src/org/apache/cassandra/db/Row.java index 0cc6691474..1e429c3ba2 100644 --- a/src/org/apache/cassandra/db/Row.java +++ b/src/org/apache/cassandra/db/Row.java @@ -120,7 +120,7 @@ public class Row ColumnFamily cf = columnFamilies_.get(cfName); if (cf == null) { - cf = new ColumnFamily(cfName); + cf = new ColumnFamily(cfName, cf.type()); columnFamilies_.put(cfName, cf); } cf.repair(columnFamilies.get(cfName)); diff --git a/src/org/apache/cassandra/db/RowMutation.java b/src/org/apache/cassandra/db/RowMutation.java index 53b29fc23b..19cee2e62c 100644 --- a/src/org/apache/cassandra/db/RowMutation.java +++ b/src/org/apache/cassandra/db/RowMutation.java @@ -185,19 +185,19 @@ public class RowMutation implements Serializable ColumnFamily columnFamily = modifications_.get(cfName); if (columnFamily == null) - columnFamily = new ColumnFamily(cfName); + columnFamily = new ColumnFamily(cfName, DatabaseDescriptor.getColumnType(cfName)); if (values.length == 2) { - if (DatabaseDescriptor.getColumnFamilyType(cfName).equals("Standard")) - { - columnFamily.addColumn(values[1], ArrayUtils.EMPTY_BYTE_ARRAY, timestamp, true); - } - else + if (columnFamily.isSuper()) { SuperColumn sc = new SuperColumn(values[1]); sc.markForDeleteAt(timestamp); columnFamily.addColumn(sc); } + else + { + columnFamily.addColumn(values[1], ArrayUtils.EMPTY_BYTE_ARRAY, timestamp, true); + } } else if (values.length == 3) { diff --git a/src/org/apache/cassandra/db/TimeFilter.java b/src/org/apache/cassandra/db/TimeFilter.java index e4e649a6d9..0e897152a3 100644 --- a/src/org/apache/cassandra/db/TimeFilter.java +++ b/src/org/apache/cassandra/db/TimeFilter.java @@ -51,9 +51,8 @@ class TimeFilter implements IFilter return columnFamily; String[] values = RowMutation.getColumnAndColumnFamily(cf); - String cfName = columnFamily.name(); - ColumnFamily filteredCf = new ColumnFamily(cfName); - if( values.length == 1 && !DatabaseDescriptor.getColumnType(cfName).equals("Super")) + ColumnFamily filteredCf = new ColumnFamily(columnFamily.name(), columnFamily.type()); + if (values.length == 1 && !columnFamily.isSuper()) { Collection columns = columnFamily.getAllColumns(); int i =0; @@ -74,7 +73,7 @@ class TimeFilter implements IFilter isDone_ = true; } } - else if ( values.length == 2 && DatabaseDescriptor.getColumnType(cfName).equals("Super") ) + else if (values.length == 2 && columnFamily.isSuper()) { /* * TODO : For super columns we need to re-visit this issue. diff --git a/src/org/apache/cassandra/net/http/ColumnFamilyFormatter.java b/src/org/apache/cassandra/net/http/ColumnFamilyFormatter.java index 5c4e9ae3ff..cc991902c0 100644 --- a/src/org/apache/cassandra/net/http/ColumnFamilyFormatter.java +++ b/src/org/apache/cassandra/net/http/ColumnFamilyFormatter.java @@ -35,9 +35,8 @@ public class ColumnFamilyFormatter extends HTMLFormatter // first print the column family specific data sb.append("ColumnFamily = " + cf.name() + "
"); - String columnFamilyType = DatabaseDescriptor.getColumnType(cf.name()); Collection cols = cf.getAllColumns(); - if("Super".equals(columnFamilyType)) + if (cf.isSuper()) { printSuperColumns(sb, cols); }