cassandra-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jbel...@apache.org
Subject svn commit: r1096094 - in /cassandra/branches/cassandra-0.8: CHANGES.txt doc/cql/CQL.textile src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java
Date Sat, 23 Apr 2011 00:13:25 GMT
Author: jbellis
Date: Sat Apr 23 00:13:25 2011
New Revision: 1096094

URL: http://svn.apache.org/viewvc?rev=1096094&view=rev
Log:
validate CQL create keyspace options
patch by jbellis; reviewed by eevans for CASSANDRA-2525

Modified:
    cassandra/branches/cassandra-0.8/CHANGES.txt
    cassandra/branches/cassandra-0.8/doc/cql/CQL.textile
    cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java

Modified: cassandra/branches/cassandra-0.8/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1096094&r1=1096093&r2=1096094&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.8/CHANGES.txt Sat Apr 23 00:13:25 2011
@@ -1,6 +1,8 @@
 0.8.0-?
  * fix NPE compacting index CFs (CASSANDRA-2528)
  * Remove checking all column families on startup for compaction candidates (CASSANDRA-2444)
+ * validate CQL create keyspace options (CASSANDRA-2525)
+
 
 0.8.0-beta1
  * remove Avro RPC support (CASSANDRA-926)

Modified: cassandra/branches/cassandra-0.8/doc/cql/CQL.textile
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/doc/cql/CQL.textile?rev=1096094&r1=1096093&r2=1096094&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/doc/cql/CQL.textile (original)
+++ cassandra/branches/cassandra-0.8/doc/cql/CQL.textile Sat Apr 23 00:13:25 2011
@@ -165,15 +165,13 @@ h2. CREATE KEYSPACE
 _Synopsis:_
 
 bc. 
-CREATE KEYSPACE <NAME> WITH replication_factor = <NUM> AND strategy_class = <STRATEGY>
-    [AND strategy_options.<OPTION> = <VALUE> [AND strategy_options.<OPTION>
= <VALUE>]];
+CREATE KEYSPACE <NAME> WITH AND strategy_class = <STRATEGY>
+    AND strategy_options.<OPTION> = <VALUE> [AND strategy_options.<OPTION>
= <VALUE>];
 
 The @CREATE KEYSPACE@ statement creates a new top-level namespace (aka "keyspace"). Valid
names are any string constructed of alphanumeric characters and underscores, but must begin
with a letter.  Properties such as replication strategy and count are specified during creation
using the following accepted keyword arguments:
 
 |_. keyword|_. required|_. description|
-|replication_factor|yes|Numeric argument that specifies the number of replicas for this keyspace.|
-|strategy_class|yes|Class name to use for managing replica placement.  Any of the shipped
strategies can be used by specifying the class name relative to org.apache.cassandra.locator,
others will need to be fully-qualified and located on the classpath.|
-|strategy_options|no|Some strategies require additional arguments which can be supplied by
appending the option name to the @strategy_options@ keyword, separated by a colon (@:@). 
For example, a strategy option of "DC1" with a value of "1" would be specified as @strategy_options:DC1
= 1@.|
+|strategy_options|no|Most strategies require additional arguments which can be supplied by
appending the option name to the @strategy_options@ keyword, separated by a colon (@:@). 
For example, a strategy option of "DC1" with a value of "1" would be specified as @strategy_options:DC1
= 1@; replication_factor for SimpleStrategy could be @strategy_options:replication_factor=3@.|
 
 h2. CREATE COLUMNFAMILY
 

Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java?rev=1096094&r1=1096093&r2=1096094&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java
(original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/cql/CreateKeyspaceStatement.java
Sat Apr 23 00:13:25 2011
@@ -23,6 +23,13 @@ package org.apache.cassandra.cql;
 
 import java.util.HashMap;
 import java.util.Map;
+
+import org.apache.cassandra.config.ConfigurationException;
+import org.apache.cassandra.config.DatabaseDescriptor;
+import org.apache.cassandra.locator.AbstractReplicationStrategy;
+import org.apache.cassandra.locator.IEndpointSnitch;
+import org.apache.cassandra.locator.TokenMetadata;
+import org.apache.cassandra.service.StorageService;
 import org.apache.cassandra.thrift.InvalidRequestException;
 
 /** A <code>CREATE KEYSPACE</code> statement parsed from a CQL query. */
@@ -68,6 +75,20 @@ public class CreateKeyspaceStatement
         for (String key : attrs.keySet())
             if ((key.contains(":")) && (key.startsWith("strategy_options")))
                 strategyOptions.put(key.split(":")[1], attrs.get(key));
+
+        // trial run to let ARS validate class + per-class options
+        try
+        {
+            AbstractReplicationStrategy.createReplicationStrategy(name,
+                                                                  AbstractReplicationStrategy.getClass(strategyClass),
+                                                                  StorageService.instance.getTokenMetadata(),
+                                                                  DatabaseDescriptor.getEndpointSnitch(),
+                                                                  strategyOptions);
+        }
+        catch (ConfigurationException e)
+        {
+            throw new InvalidRequestException(e.getMessage());
+        }
     }
 
     public String getName()



Mime
View raw message