You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2011/09/06 00:21:01 UTC
svn commit: r1165438 - in /cassandra/branches/cassandra-0.8: CHANGES.txt
src/java/org/apache/cassandra/thrift/ThriftValidation.java
test/unit/org/apache/cassandra/cli/CliTest.java
test/unit/org/apache/cassandra/thrift/ThriftValidationTest.java
Author: xedin
Date: Mon Sep 5 22:21:01 2011
New Revision: 1165438
URL: http://svn.apache.org/viewvc?rev=1165438&view=rev
Log:
Prevent users from creating keyspaces with LocalStrategy replication
patch by Pavel Yaskevich; reviewed by Jonathan Ellis for CASSANDRA-3139
Modified:
cassandra/branches/cassandra-0.8/CHANGES.txt
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/thrift/ThriftValidationTest.java
Modified: cassandra/branches/cassandra-0.8/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/CHANGES.txt?rev=1165438&r1=1165437&r2=1165438&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.8/CHANGES.txt Mon Sep 5 22:21:01 2011
@@ -1,7 +1,8 @@
0.8.6
* avoid trying to watch cassandra-topology.properties when loaded from jar
(CASSANDRA-3138)
-
+ * prevent users from creating keyspaces with LocalStrategy replication
+ (CASSANDRA-3139)
0.8.5
* fix NPE when encryption_options is unspecified (CASSANDRA-3007)
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java?rev=1165438&r1=1165437&r2=1165438&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/thrift/ThriftValidation.java Mon Sep 5 22:21:01 2011
@@ -27,6 +27,7 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.cassandra.config.*;
+import org.apache.cassandra.locator.*;
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.marshal.AbstractType;
import org.apache.cassandra.db.marshal.AsciiType;
@@ -36,10 +37,6 @@ import org.apache.cassandra.db.migration
import org.apache.cassandra.dht.IPartitioner;
import org.apache.cassandra.dht.RandomPartitioner;
import org.apache.cassandra.dht.Token;
-import org.apache.cassandra.locator.AbstractReplicationStrategy;
-import org.apache.cassandra.locator.IEndpointSnitch;
-import org.apache.cassandra.locator.NetworkTopologyStrategy;
-import org.apache.cassandra.locator.TokenMetadata;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
@@ -671,6 +668,10 @@ public class ThriftValidation
TokenMetadata tmd = StorageService.instance.getTokenMetadata();
IEndpointSnitch eps = DatabaseDescriptor.getEndpointSnitch();
Class<? extends AbstractReplicationStrategy> cls = AbstractReplicationStrategy.getClass(ks_def.strategy_class);
+
+ if (cls.equals(LocalStrategy.class))
+ throw new ConfigurationException("Unable to use given strategy class: LocalStrategy is reserved for internal use.");
+
AbstractReplicationStrategy.createReplicationStrategy(ks_def.name, cls, tmd, eps, options);
}
Modified: cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java?rev=1165438&r1=1165437&r2=1165438&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java (original)
+++ cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/cli/CliTest.java Mon Sep 5 22:21:01 2011
@@ -124,8 +124,7 @@ public class CliTest extends CleanupHelp
"drop index on '123'.617070;",
"drop index on '123'.'-617071';",
"drop index on CF3.'big world';",
- "update keyspace TestKeySpace with placement_strategy='org.apache.cassandra.locator.LocalStrategy' and durable_writes = false;",
- "update keyspace TestKeySpace with strategy_options=[{DC1:3, DC2:4, DC5:1}];",
+ "update keyspace TestKeySpace with durable_writes = false;",
"assume 123 comparator as utf8;",
"assume 123 sub_comparator as integer;",
"assume 123 validator as lexicaluuid;",
@@ -166,6 +165,8 @@ public class CliTest extends CleanupHelp
"get myCF['key']['scName']",
"assume CF3 keys as utf8;",
"use TestKEYSpace;",
+ "update keyspace TestKeySpace with placement_strategy='org.apache.cassandra.locator.NetworkTopologyStrategy';",
+ "update keyspace TestKeySpace with strategy_options=[{DC1:3, DC2:4, DC5:1}];",
"describe cluster;",
"help describe cluster;",
"show cluster name",
Modified: cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/thrift/ThriftValidationTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/thrift/ThriftValidationTest.java?rev=1165438&r1=1165437&r2=1165438&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/thrift/ThriftValidationTest.java (original)
+++ cassandra/branches/cassandra-0.8/test/unit/org/apache/cassandra/thrift/ThriftValidationTest.java Mon Sep 5 22:21:01 2011
@@ -28,17 +28,13 @@ import org.apache.cassandra.config.Datab
import org.apache.cassandra.db.marshal.AsciiType;
import org.apache.cassandra.db.marshal.UTF8Type;
-import org.junit.Test;
-
+import org.apache.cassandra.locator.LocalStrategy;
+import org.apache.cassandra.locator.NetworkTopologyStrategy;
import org.apache.cassandra.CleanupHelper;
-import org.apache.cassandra.config.CFMetaData;
import org.apache.cassandra.config.ConfigurationException;
-import org.apache.cassandra.config.DatabaseDescriptor;
-import org.apache.cassandra.db.marshal.AsciiType;
-import org.apache.cassandra.db.marshal.UTF8Type;
import org.apache.cassandra.utils.FBUtilities;
-import java.util.concurrent.Callable;
+import org.junit.Test;
public class ThriftValidationTest extends CleanupHelper
{
@@ -144,4 +140,56 @@ public class ThriftValidationTest extend
assert gotException : "expected InvalidRequestException but not received.";
}
+
+ @Test
+ public void testValidateKsDef()
+ {
+ KsDef ks_def = new KsDef()
+ .setName("keyspaceValid")
+ .setStrategy_class(LocalStrategy.class.getSimpleName());
+
+
+ boolean gotException = false;
+
+ try
+ {
+ ThriftValidation.validateKsDef(ks_def);
+ }
+ catch (ConfigurationException e)
+ {
+ gotException = true;
+ }
+
+ assert gotException : "expected ConfigurationException but not received.";
+
+ ks_def.setStrategy_class(LocalStrategy.class.getName());
+
+ gotException = false;
+
+ try
+ {
+ ThriftValidation.validateKsDef(ks_def);
+ }
+ catch (ConfigurationException e)
+ {
+ gotException = true;
+ }
+
+ assert gotException : "expected ConfigurationException but not received.";
+
+ ks_def.setStrategy_class(NetworkTopologyStrategy.class.getName());
+
+ gotException = false;
+
+ try
+ {
+ ThriftValidation.validateKsDef(ks_def);
+ }
+ catch (ConfigurationException e)
+ {
+ gotException = true;
+ }
+
+ assert !gotException : "got unexpected ConfigurationException";
+ }
}