Author: slebresne
Date: Mon May 9 13:29:24 2011
New Revision: 1101021
URL: http://svn.apache.org/viewvc?rev=1101021&view=rev
Log:
Don't allow {LOCAL|EACH}_QUORUM unless strategy is NTS
patch by slebresne; reviewed by jbellis for CASSANDRA-2627
Modified:
cassandra/branches/cassandra-0.7/CHANGES.txt
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/CassandraServer.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=1101021&r1=1101020&r2=1101021&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.7/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.7/CHANGES.txt Mon May 9 13:29:24 2011
@@ -14,6 +14,7 @@
* improve ignoring of obsolete mutations in index maintenance (CASSANDRA-2401)
* recognize attempt to drop just the index while leaving the column
definition alone (CASSANDRA-2619)
+ * Don't allow {LOCAL|EACH}_QUORUM unless strategy is NTS (CASSANDRA-2627)
0.7.5
Modified:
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/CassandraServer.java
URL:
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/CassandraServer.java?rev=1101021&r1=1101020&r2=1101021&view=diff
==============================================================================
---
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/CassandraServer.java
(original)
+++
cassandra/branches/cassandra-0.7/src/java/org/apache/cassandra/thrift/CassandraServer.java
Mon May 9 13:29:24 2011
@@ -250,6 +250,7 @@ public class CassandraServer implements
{
ThriftValidation.validateColumnParent(keyspace, column_parent);
ThriftValidation.validatePredicate(keyspace, column_parent, predicate);
+ ThriftValidation.validateConsistencyLevel(keyspace, consistency_level);
List<ReadCommand> commands = new ArrayList<ReadCommand>();
if (predicate.column_names != null)
@@ -282,6 +283,7 @@ public class CassandraServer implements
String keyspace = state().getKeyspace();
ThriftValidation.validateColumnPath(keyspace, column_path);
+ ThriftValidation.validateConsistencyLevel(keyspace, consistency_level);
QueryPath path = new QueryPath(column_path.column_family,
column_path.column == null ? null : column_path.super_column);
List<ByteBuffer> nameAsList = Arrays.asList(column_path.column == null
? column_path.super_column : column_path.column);
@@ -410,8 +412,9 @@ public class CassandraServer implements
doInsert(consistency_level, Arrays.asList(rm));
}
- private void doInsert(ConsistencyLevel consistency_level,
List<RowMutation> mutations) throws UnavailableException, TimedOutException
+ private void doInsert(ConsistencyLevel consistency_level,
List<RowMutation> mutations) throws UnavailableException, TimedOutException,
InvalidRequestException
{
+ ThriftValidation.validateConsistencyLevel(state().getKeyspace(),
consistency_level);
try
{
schedule();
@@ -459,6 +462,7 @@ public class CassandraServer implements
ThriftValidation.validateColumnParent(keyspace, column_parent);
ThriftValidation.validatePredicate(keyspace, column_parent, predicate);
ThriftValidation.validateKeyRange(range);
+ ThriftValidation.validateConsistencyLevel(keyspace, consistency_level);
List<Row> rows;
try
@@ -522,6 +526,7 @@ public class CassandraServer implements
ThriftValidation.validateColumnParent(keyspace, column_parent);
ThriftValidation.validatePredicate(keyspace, column_parent,
column_predicate);
ThriftValidation.validateIndexClauses(keyspace,
column_parent.column_family, index_clause);
+ ThriftValidation.validateConsistencyLevel(keyspace, consistency_level);
List<Row> rows;
try
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=1101021&r1=1101020&r2=1101021&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
Mon May 9 13:29:24 2011
@@ -36,6 +36,8 @@ import org.apache.cassandra.db.marshal.M
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.NetworkTopologyStrategy;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.utils.ByteBufferUtil;
import org.apache.cassandra.utils.FBUtilities;
@@ -74,6 +76,19 @@ public class ThriftValidation
}
}
+ // Don't check that the table exists, validateTable or
validateColumnFamily must be called beforehand.
+ public static void validateConsistencyLevel(String table, ConsistencyLevel
cl) throws InvalidRequestException
+ {
+ switch (cl)
+ {
+ case LOCAL_QUORUM:
+ case EACH_QUORUM:
+ AbstractReplicationStrategy strategy =
Table.open(table).getReplicationStrategy();
+ if (!(strategy instanceof NetworkTopologyStrategy))
+ throw new InvalidRequestException("consistency level " +
cl + " not compatible with replication strategy (" +
strategy.getClass().getName() + ")");
+ }
+ }
+
public static ColumnFamilyType validateColumnFamily(String tablename,
String cfName) throws InvalidRequestException
{
if (cfName.isEmpty())