bert Passek created CASSANDRA-4421:
--------------------------------------
Summary: Invalid validator used for column values of composite
columns -> writing fails
Key: CASSANDRA-4421
URL: https://issues.apache.org/jira/browse/CASSANDRA-4421
Project: Cassandra
Issue Type: Bug
Components: API
Affects Versions: 1.1.2
Environment: Debian Squeeze
Reporter: bert Passek
Hello,
i faced a bug while writing composite column values and following validation on
server side.
This is the setup for reproduction:
1. create a keyspace
create keyspace test with strategy_class = 'SimpleStrategy' and
strategy_options:replication_factor = 1;
2. create a cf via cql (3.0)
create table test1 (
a int,
b int,
c int,
primary key (a, b)
);
If i have a look at the schema in cli i noticed that there is no column
metadata for columns not part of primary key.
create column family test1
with column_type = 'Standard'
and comparator =
'CompositeType(org.apache.cassandra.db.marshal.Int32Type,org.apache.cassandra.db.marshal.UTF8Type)'
and default_validation_class = 'UTF8Type'
and key_validation_class = 'Int32Type'
and read_repair_chance = 0.1
and dclocal_read_repair_chance = 0.0
and gc_grace = 864000
and min_compaction_threshold = 4
and max_compaction_threshold = 32
and replicate_on_write = true
and compaction_strategy =
'org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy'
and caching = 'KEYS_ONLY'
and compression_options = {'sstable_compression' :
'org.apache.cassandra.io.compress.SnappyCompressor'};
Please notice the default validation class: UTF8Type
Now i would like to insert value > 127 via cassandra client (no cql, part of
mr-jobs). Have a look at the attachement.
Batch mutate fails:
InvalidRequestException(why:(String didn't validate.) [test][test1][1:c] failed
validation)
A validator for column value is fetched in ThriftValidation::validateColumnData
which returns always the default validator which is UTF8Type as described above
(The ColumnDefinition for given column name "c" is always null)
In UTF8Type there is a check for
if (b > 127)
return false;
Anyway, maybe i'm doing something wrong, but i used cql 3.0 for table creation.
I assigned data types to all columns, but i can not set values for a composite
column because the default validation class is used.
I think the schema should know the correct validator even for composite
columns. The usage of the default validation class does not make sense.
Best Regards
Bert Passek
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira