[ https://issues.apache.org/jira/browse/CASSANDRA-2571?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jonathan Ellis updated CASSANDRA-2571: -------------------------------------- Attachment: 2571.txt I find boolean (or other :) flags that change method behavior subtly confusing. Attached is a version that inlines the new check into insert(), which is the only place that wants it. > Check for null super column for SC CF in ThriftValidation (and always > validate the sc key) > ------------------------------------------------------------------------------------------ > > Key: CASSANDRA-2571 > URL: https://issues.apache.org/jira/browse/CASSANDRA-2571 > Project: Cassandra > Issue Type: Bug > Components: Core > Affects Versions: 0.7.0, 0.8 beta 1 > Reporter: Mike Bulman > Assignee: Sylvain Lebresne > Fix For: 0.7.6, 0.8.0 > > Attachments: 0001-Improve-ThriftValidation.patch, 2571.txt > > > Run the following via cli: > {noformat} > [default@test] use test; > Authenticated to keyspace: test > [default@test] create column family super with column_type=Super and > default_validation_class=CounterColumnType; > d41df8e0-7055-11e0-0000-242d50cf1fbf > Waiting for schema agreement... > ... schemas agree across the cluster > [default@test] incr super['0']['0']; > Value incremented. > [default@test] incr super['0']['0']['0']; > null > {noformat} > Obviously the first incr call is invalid, even though it reports otherwise, > as well as generates this exception: > {noformat} > ERROR 17:38:05,871 Fatal exception in thread Thread[COMMIT-LOG-WRITER,5,main] > java.lang.RuntimeException: java.lang.ClassCastException: > org.apache.cassandra.db.CounterColumn cannot be cast to > org.apache.cassandra.db.SuperColumn > at > org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:34) > at java.lang.Thread.run(Thread.java:636) > Caused by: java.lang.ClassCastException: > org.apache.cassandra.db.CounterColumn cannot be cast to > org.apache.cassandra.db.SuperColumn > at > org.apache.cassandra.db.SuperColumnSerializer.serialize(SuperColumn.java:353) > at > org.apache.cassandra.db.SuperColumnSerializer.serialize(SuperColumn.java:337) > at > org.apache.cassandra.db.ColumnFamilySerializer.serializeForSSTable(ColumnFamilySerializer.java:88) > at > org.apache.cassandra.db.ColumnFamilySerializer.serialize(ColumnFamilySerializer.java:74) > at > org.apache.cassandra.db.RowMutation$RowMutationSerializer.serialize(RowMutation.java:353) > at > org.apache.cassandra.db.RowMutation.getSerializedBuffer(RowMutation.java:236) > at > org.apache.cassandra.db.commitlog.CommitLogSegment.write(CommitLogSegment.java:111) > at > org.apache.cassandra.db.commitlog.CommitLog$LogRecordAdder.run(CommitLog.java:480) > at > org.apache.cassandra.db.commitlog.PeriodicCommitLogExecutorService$1.runMayThrow(PeriodicCommitLogExecutorService.java:49) > at > org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30) > ... 1 more > {noformat} > But the second, proper incr call results in a bunch of exceptions and not a > real increment. -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira