Author: jbellis
Date: Fri Dec  3 17:52:46 2010
New Revision: 1041932

URL: http://svn.apache.org/viewvc?rev=1041932&view=rev
Log:
improved validation of column_metadata
patch by jbellis; reviewed by gdusbabek for CASSANDRA-1813

Modified:
    cassandra/branches/cassandra-0.7/CHANGES.txt
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/ColumnDefinition.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyType.java
    
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java

Modified: cassandra/branches/cassandra-0.7/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/CHANGES.txt?rev=1041932&r1=1041931&r2=1041932&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Fri Dec  3 17:52:46 2010
@@ -26,6 +26,7 @@ dev
  * fix consistencylevel calculations for NetworkTopologyStrategy
    (CASSANDRA-1804)
  * cli support index type enum names (CASSANDRA-1810)
+ * improved validation of column_metadata (CASSANDRA-1813)
 
 
 0.7.0-rc1

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/ColumnDefinition.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/ColumnDefinition.java?rev=1041932&r1=1041931&r2=1041932&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/ColumnDefinition.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/config/ColumnDefinition.java
 Fri Dec  3 17:52:46 2010
@@ -103,7 +103,6 @@ public class ColumnDefinition {
 
     public static ColumnDefinition fromColumnDef(ColumnDef thriftColumnDef) 
throws ConfigurationException
     {
-        validateIndexType(thriftColumnDef);
         return new ColumnDefinition(thriftColumnDef.name, 
thriftColumnDef.validation_class, thriftColumnDef.index_type, 
thriftColumnDef.index_name);
     }
     
@@ -123,10 +122,7 @@ public class ColumnDefinition {
 
         Map<ByteBuffer, ColumnDefinition> cds = new TreeMap<ByteBuffer, 
ColumnDefinition>();
         for (ColumnDef thriftColumnDef : thriftDefs)
-        {
-            validateIndexType(thriftColumnDef);
             cds.put(thriftColumnDef.name, fromColumnDef(thriftColumnDef));
-        }
 
         return Collections.unmodifiableMap(cds);
     }
@@ -146,12 +142,6 @@ public class ColumnDefinition {
         return Collections.unmodifiableMap(cds);
     }
 
-    public static void validateIndexType(org.apache.cassandra.thrift.ColumnDef 
thriftColumnDef) throws ConfigurationException
-    {
-        if ((thriftColumnDef.index_name != null) && 
(thriftColumnDef.index_type == null))
-            throw new ConfigurationException("index_name cannot be set if 
index_type is not also set");
-    }
-
     public static void validateIndexType(org.apache.cassandra.avro.ColumnDef 
avroColumnDef) throws ConfigurationException
     {
         if ((avroColumnDef.index_name != null) && (avroColumnDef.index_type == 
null))

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyType.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyType.java?rev=1041932&r1=1041931&r2=1041932&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyType.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/db/ColumnFamilyType.java
 Fri Dec  3 17:52:46 2010
@@ -25,11 +25,12 @@ public enum ColumnFamilyType
     Standard,
     Super;
 
-    public final static ColumnFamilyType create(String name)
+    public static ColumnFamilyType create(String name)
     {
         try
         {
-            return name == null ? null : ColumnFamilyType.valueOf(name);
+            // TODO thrift optional parameter in CfDef is leaking down here 
which it shouldn't
+            return name == null ? ColumnFamilyType.Standard : 
ColumnFamilyType.valueOf(name);
         }
         catch (IllegalArgumentException e)
         {

Modified: 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=1041932&r1=1041931&r2=1041932&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java
 (original)
+++ 
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/ThriftValidation.java
 Fri Dec  3 17:52:46 2010
@@ -383,14 +383,20 @@ public class ThriftValidation
     {
         try
         {
+            ColumnFamilyType cfType = 
ColumnFamilyType.create(cf_def.column_type);
+            if (cfType == null)
+                throw new InvalidRequestException("invalid column type " + 
cf_def.column_type);
+
             DatabaseDescriptor.getComparator(cf_def.comparator_type);
             DatabaseDescriptor.getComparator(cf_def.subcomparator_type);
             DatabaseDescriptor.getComparator(cf_def.default_validation_class);
+            if (cfType != ColumnFamilyType.Super && cf_def.subcomparator_type 
!= null)
+                throw new InvalidRequestException("subcomparator_type is 
invalid for standard columns");
 
             if (cf_def.column_metadata == null)
                 return;
 
-            AbstractType comparator = cf_def.subcomparator_type == null
+            AbstractType comparator = cfType == ColumnFamilyType.Standard
                                     ? 
DatabaseDescriptor.getComparator(cf_def.comparator_type)
                                     : 
DatabaseDescriptor.getComparator(cf_def.subcomparator_type);
             for (ColumnDef c : cf_def.column_metadata)
@@ -406,6 +412,12 @@ public class ThriftValidation
                     throw new InvalidRequestException(String.format("Column 
name %s is not valid for comparator %s",
                                                                     
FBUtilities.bytesToHex(c.name), cf_def.comparator_type));
                 }
+
+                if ((c.index_name != null) && (c.index_type == null))
+                    throw new ConfigurationException("index_name cannot be set 
without index_type");
+
+                if (cfType == ColumnFamilyType.Super && c.index_type != null)
+                    throw new InvalidRequestException("Secondary indexes are 
not supported on supercolumns");
             }
         }
         catch (ConfigurationException e)


Reply via email to