Maybe it's because of the "COMPACT STORAGE". Without that, the cells of a CQL3 table definition will be mapped to a composite taking the clustering part of the key and the column name. So, i.e. in your case the "value" column should be mapped to a cell with name column1:value if your def not includes the "COMPACT STORAGE" part. I think that the assert tries to ensure that the "alter" applies to a CQL3 table (which column names are composite ones), and not the old "compact".
http://www.datastax.com/dev/blog/thrift-to-cql3 Am I wrong? Adriano. ________________________________ From: aaron morton [mailto:aa...@thelastpickle.com] Sent: Lunes, 29 de Julio de 2013 05:23 a.m. To: user@cassandra.apache.org Subject: Re: AssertionError during ALTER TYPE in 1.2.5 The error is because the underlying CF is not defined using a composite type for the comparator. CREATE TABLE "RRD" ( key text, column1 blob, value blob, PRIMARY KEY (key, column1) ) WITH COMPACT STORAGE AND Looks like this PRIMARY KEY (key, column1) is incorrect. That says "The Primary Key is made up of a Partition Key and one Clustering Column. The Partition Key (storage engine row key) is the 'key' column. The Clustering Column is 'column1'. The Clustering Column should be used as the first column in a composite type in the storage engine row for each non Primary Key column name" But your CLI def does not use a composite type for the column validator. Try CREATE TABLE "RRD" ( key text, column1 blob, value blob, PRIMARY KEY (key) ) WITH COMPACT STORAGE AND Hope that helps. ----------------- Aaron Morton Cassandra Consultant New Zealand @aaronmorton http://www.thelastpickle.com On 27/07/2013, at 3:48 AM, Sergey Leschenko <sergle...@gmail.com<mailto:sergle...@gmail.com>> wrote: Hi, I have following column family from pre-CQL times, now using 1.2.5 and want to investigate ability to use CQL instead of Thrift API. ColumnFamily: RRD Key Validation Class: org.apache.cassandra.db.marshal.UTF8Type Default column value validator: org.apache.cassandra.db.marshal.BytesType Columns sorted by: org.apache.cassandra.db.marshal.BytesType GC grace seconds: 864000 Compaction min/max thresholds: 4/32 Read repair chance: 0.1 DC Local Read repair chance: 0.0 Populate IO Cache on flush: false Replicate on write: true Caching: KEYS_ONLY Bloom Filter FP chance: default Built indexes: [] Compaction Strategy: org.apache.cassandra.db.compaction.SizeTieredCompactionStrategy Compression Options: sstable_compression: org.apache.cassandra.io.compress.SnappyCompressor In cqlsh it looks like CREATE TABLE "RRD" ( key text, column1 blob, value blob, PRIMARY KEY (key, column1) ) WITH COMPACT STORAGE AND bloom_filter_fp_chance=0.010000 AND caching='KEYS_ONLY' AND comment='' AND dclocal_read_repair_chance=0.000000 AND gc_grace_seconds=864000 AND read_repair_chance=0.100000 AND replicate_on_write='true' AND populate_io_cache_on_flush='false' AND compaction={'class': 'SizeTieredCompactionStrategy'} AND compression={'sstable_compression': 'SnappyCompressor'}; I have already successfully changed type of key from blob to text. column1 is actually a text string, as I would like to change it type from blob to text too. But when I run query ALTER TABLE "RRD" ALTER column1 TYPE text, cqlsh hangs, and I observe following error in Cassandra log: ERROR 18:28:56,103 Exception in thread Thread[Thrift:16,5,main] java.lang.AssertionError at org.apache.cassandra.cql3.statements.AlterTableStatement.announceMigration(AlterTableStatement.java:147) at org.apache.cassandra.cql3.statements.SchemaAlteringStatement.execute(SchemaAlteringStatement.java:73) at org.apache.cassandra.cql3.QueryProcessor.processStatement(QueryProcessor.java:132) at org.apache.cassandra.cql3.QueryProcessor.process(QueryProcessor.java:143) at org.apache.cassandra.thrift.CassandraServer.execute_cql3_query(CassandraServer.java:1707) at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4074) at org.apache.cassandra.thrift.Cassandra$Processor$execute_cql3_query.getResult(Cassandra.java:4062) at org.apache.thrift.ProcessFunction.process(ProcessFunction.java:32) at org.apache.thrift.TBaseProcessor.process(TBaseProcessor.java:34) at org.apache.cassandra.thrift.CustomTThreadPoolServer$WorkerProcess.run(CustomTThreadPoolServer.java:199) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at java.lang.Thread.run(Thread.java:724) >From source code I see that it failed assertion: case COLUMN_ALIAS: assert cfDef.isComposite; So it have to be composite, but there is already exists PRIMARY KEY (key, column1). Did I miss something? How can I change type of this column1 ? Thanks. -- Sergey