Add missing validateKey calls for inserts, and move get key validation where it's more visible. Also remove inconsistent trim-ing of keys. patch by jbellis; tested by Eric Lubow for CASSANDRA-486

git-svn-id: https://svn.apache.org/repos/asf/incubator/cassandra/branches/cassandra-0.4@824815 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Jonathan Ellis 2009-10-13 15:47:43 +00:00
parent 2acbb12f41
commit dbc916f2fd
2 changed files with 17 additions and 7 deletions

View File

@ -80,11 +80,6 @@ public class CassandraServer implements Cassandra.Iface
Map<String, ColumnFamily> columnFamilyKeyMap = new HashMap<String,ColumnFamily>();
for (ReadCommand command: commands)
{
ThriftValidation.validateKey(command.key);
}
if (consistency_level == ConsistencyLevel.ZERO)
{
throw new InvalidRequestException("Consistency level zero may not be applied to read operations");
@ -238,13 +233,19 @@ public class CassandraServer implements Cassandra.Iface
if (predicate.column_names != null)
{
for (String key: keys)
{
ThriftValidation.validateKey(key);
commands.add(new SliceByNamesReadCommand(keyspace, key, column_parent, predicate.column_names));
}
ThriftValidation.validateColumns(keyspace, column_parent, predicate.column_names);
}
else
{
for (String key: keys)
{
ThriftValidation.validateKey(key);
commands.add(new SliceFromReadCommand(keyspace, key, column_parent, range.start, range.finish, range.reversed, range.count));
}
ThriftValidation.validateRange(keyspace, column_parent, range);
}
@ -318,6 +319,7 @@ public class CassandraServer implements Cassandra.Iface
List<ReadCommand> commands = new ArrayList<ReadCommand>();
for (String key: keys)
{
ThriftValidation.validateKey(key);
commands.add(new SliceByNamesReadCommand(table, key, path, nameAsList));
}
@ -380,6 +382,7 @@ public class CassandraServer implements Cassandra.Iface
List<ReadCommand> commands = new ArrayList<ReadCommand>();
for (String key: keys)
{
ThriftValidation.validateKey(key);
commands.add(new SliceFromReadCommand(table, key, column_parent, ArrayUtils.EMPTY_BYTE_ARRAY, ArrayUtils.EMPTY_BYTE_ARRAY, true, Integer.MAX_VALUE));
}
@ -409,7 +412,7 @@ public class CassandraServer implements Cassandra.Iface
ThriftValidation.validateKey(key);
ThriftValidation.validateColumnPath(table, column_path);
RowMutation rm = new RowMutation(table, key.trim());
RowMutation rm = new RowMutation(table, key);
try
{
rm.add(new QueryPath(column_path), value, timestamp);
@ -426,6 +429,7 @@ public class CassandraServer implements Cassandra.Iface
{
if (logger.isDebugEnabled())
logger.debug("batch_insert");
ThriftValidation.validateKey(key);
for (String cfName : cfmap.keySet())
{
@ -453,9 +457,10 @@ public class CassandraServer implements Cassandra.Iface
{
if (logger.isDebugEnabled())
logger.debug("remove");
ThriftValidation.validateKey(key);
ThriftValidation.validateColumnPathOrParent(table, column_path);
RowMutation rm = new RowMutation(table, key.trim());
RowMutation rm = new RowMutation(table, key);
rm.delete(new QueryPath(column_path), timestamp);
doInsert(consistency_level, rm);

View File

@ -289,6 +289,11 @@ class TestMutations(CassandraTester):
def test_bad_calls(self):
# supercolumn in a non-super CF
_expect_exception(lambda: client.insert('Keyspace1', 'key1', ColumnPath('Standard1', 'x', 'y'), 'value', 0, ConsistencyLevel.ONE), InvalidRequestException)
# empty key
_expect_exception(lambda: client.get('Keyspace1', '', ColumnPath('Standard1', column='c1'), ConsistencyLevel.ONE), InvalidRequestException)
cfmap = {'Super1': [ColumnOrSuperColumn(super_column=c) for c in _SUPER_COLUMNS],
'Super2': [ColumnOrSuperColumn(super_column=c) for c in _SUPER_COLUMNS]}
_expect_exception(lambda: client.batch_insert('Keyspace1', '', cfmap, ConsistencyLevel.ONE), InvalidRequestException)
# get doesn't specify column name
_expect_exception(lambda: client.get('Keyspace1', 'key1', ColumnPath('Standard1'), ConsistencyLevel.ONE), InvalidRequestException)
# supercolumn in a non-super CF