You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/07/06 20:21:23 UTC

svn commit: r960972 - in /cassandra/trunk: src/java/org/apache/cassandra/config/ test/conf/

Author: jbellis
Date: Tue Jul  6 18:21:22 2010
New Revision: 960972

URL: http://svn.apache.org/viewvc?rev=960972&view=rev
Log:
introduce RawColumnDefinition for yaml import and fix CFMetaData deserialize bug.  patch by jbellis

Added:
    cassandra/trunk/src/java/org/apache/cassandra/config/RawColumnDefinition.java
Modified:
    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/DatabaseDescriptor.java
    cassandra/trunk/test/conf/cassandra.yaml

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=960972&r1=960971&r2=960972&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/CFMetaData.java Tue Jul  6 18:21:22 2010
@@ -255,14 +255,13 @@ public final class CFMetaData
         double keyCacheSize = din.readDouble();
         double readRepairChance = din.readDouble();
         int cfId = din.readInt();
-        int columnMetadataSize = din.readInt();
+        int columnMetadataEntries = din.readInt();
         Map<byte[], ColumnDefinition> column_metadata = new TreeMap<byte[], ColumnDefinition>(FBUtilities.byteArrayComparator);
-        while (columnMetadataSize > 0)
+        for (int i = 0; i < columnMetadataEntries; i++)
         {
             int cdSize = din.readInt();
             byte[] cdBytes = new byte[cdSize];
-            if (in.read(cdBytes) != cdSize)
-                throw new IOException("short read of ColumnDefinition");
+            din.readFully(cdBytes);
             ColumnDefinition cd = ColumnDefinition.deserialize(cdBytes);
             column_metadata.put(cd.name, cd);
         }

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=960972&r1=960971&r2=960972&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/ColumnFamily.java Tue Jul  6 18:21:22 2010
@@ -18,5 +18,5 @@ public class ColumnFamily {
     public double keys_cached = CFMetaData.DEFAULT_KEY_CACHE_SIZE; 
     public double read_repair_chance = CFMetaData.DEFAULT_READ_REPAIR_CHANCE;
     public boolean preload_row_cache = CFMetaData.DEFAULT_PRELOAD_ROW_CACHE;
-    public Map<byte[], ColumnDefinition> column_metata = Collections.emptyMap();
+    public RawColumnDefinition[] column_metadata = new RawColumnDefinition[0];
 }

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=960972&r1=960971&r2=960972&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/DatabaseDescriptor.java Tue Jul  6 18:21:22 2010
@@ -115,11 +115,14 @@ public class DatabaseDescriptor
             InputStream input = new FileInputStream(new File(configFileName));
             org.yaml.snakeyaml.constructor.Constructor constructor = new org.yaml.snakeyaml.constructor.Constructor(Config.class);
             TypeDescription desc = new TypeDescription(Config.class);
+            desc.putListPropertyType("keyspaces", Keyspace.class);
             TypeDescription ksDesc = new TypeDescription(Keyspace.class);
             ksDesc.putListPropertyType("column_families", ColumnFamily.class);
-            desc.putListPropertyType("keyspaces", Keyspace.class);
+            TypeDescription cfDesc = new TypeDescription(ColumnFamily.class);
+            cfDesc.putListPropertyType("column_metadata", RawColumnDefinition.class);
             constructor.addTypeDescription(desc);
             constructor.addTypeDescription(ksDesc);
+            constructor.addTypeDescription(cfDesc);
             Yaml yaml = new Yaml(new Loader(constructor));
             conf = (Config)yaml.load(input);
             
@@ -536,7 +539,34 @@ 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, cfType, cf.clock_type, comparator, subcolumnComparator, reconciler, cf.comment, cf.rows_cached, cf.preload_row_cache, cf.keys_cached, cf.read_repair_chance, cf.column_metata);
+                
+                Map<byte[], ColumnDefinition> metadata = new TreeMap<byte[], ColumnDefinition>(FBUtilities.byteArrayComparator);
+                for (RawColumnDefinition rcd : cf.column_metadata)
+                {
+                    try
+                    {
+                        byte[] columnName = rcd.name.getBytes("UTF-8");
+                        metadata.put(columnName, new ColumnDefinition(columnName, rcd.validator_class, rcd.index_type, rcd.index_name));
+                    }
+                    catch (UnsupportedEncodingException e)
+                    {
+                        throw new AssertionError(e);
+                    }
+                }
+
+                cfDefs[j++] = new CFMetaData(keyspace.name, 
+                                             cf.name, 
+                                             cfType, 
+                                             cf.clock_type, 
+                                             comparator, 
+                                             subcolumnComparator, 
+                                             reconciler, 
+                                             cf.comment, 
+                                             cf.rows_cached,
+                                             cf.preload_row_cache, 
+                                             cf.keys_cached, 
+                                             cf.read_repair_chance, 
+                                             metadata);
             }
             defs.add(new KSMetaData(keyspace.name, strategyClass, keyspace.replication_factor, cfDefs));
             

Added: cassandra/trunk/src/java/org/apache/cassandra/config/RawColumnDefinition.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/config/RawColumnDefinition.java?rev=960972&view=auto
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/config/RawColumnDefinition.java (added)
+++ cassandra/trunk/src/java/org/apache/cassandra/config/RawColumnDefinition.java Tue Jul  6 18:21:22 2010
@@ -0,0 +1,11 @@
+package org.apache.cassandra.config;
+
+import org.apache.cassandra.thrift.IndexType;
+
+public class RawColumnDefinition
+{
+    public String name;
+    public String validator_class;
+    public IndexType index_type;
+    public String index_name;
+}

Modified: cassandra/trunk/test/conf/cassandra.yaml
URL: http://svn.apache.org/viewvc/cassandra/trunk/test/conf/cassandra.yaml?rev=960972&r1=960971&r2=960972&view=diff
==============================================================================
--- cassandra/trunk/test/conf/cassandra.yaml (original)
+++ cassandra/trunk/test/conf/cassandra.yaml Tue Jul  6 18:21:22 2010
@@ -62,6 +62,12 @@ keyspaces:
           column_type: Super
           compare_subcolumns_with: UTF8Type
 
+        - name: Indexed1
+          column_metadata:
+            - name: birthdate
+              validator_class: LongType
+              index_type: KEYS
+
     - name: Keyspace2
       replica_placement_strategy: org.apache.cassandra.locator.RackUnawareStrategy
       replication_factor: 1