Hi,

using C* 1.2.5 I just found a weird AssertionError in our logfiles:

...
 INFO [OptionalTasks:1] 2013-07-01 09:15:43,608 MeteredFlusher.java (line 58) flushing high-traffic column family CFS(Keyspace='Monitoring', ColumnFamily='cfDateOrderedMessages') (estimated 5242880 bytes)
 INFO [OptionalTasks:1] 2013-07-01 09:15:43,609 ColumnFamilyStore.java (line 630) Enqueuing flush of Memtable-cfDateOrderedMessages@2147245119(4616888/5242880 serialized/live bytes, 23714 ops)
 INFO [FlushWriter:9] 2013-07-01 09:15:43,610 Memtable.java (line 461) Writing Memtable-cfDateOrderedMessages@2147245119(4616888/5242880 serialized/live bytes, 23714 ops)
ERROR [FlushWriter:9] 2013-07-01 09:15:44,145 CassandraDaemon.java (line 192) Exception in thread Thread[FlushWriter:9,5,main]
java.lang.AssertionError
        at org.apache.cassandra.db.ColumnSerializer.serialize(ColumnSerializer.java:40)
        at org.apache.cassandra.db.ColumnSerializer.serialize(ColumnSerializer.java:30)
        at org.apache.cassandra.db.OnDiskAtom$Serializer.serializeForSSTable(OnDiskAtom.java:62)
        at org.apache.cassandra.db.ColumnIndex$Builder.add(ColumnIndex.java:181)
        at org.apache.cassandra.db.ColumnIndex$Builder.build(ColumnIndex.java:133)
        at org.apache.cassandra.io.sstable.SSTableWriter.append(SSTableWriter.java:185)
        at org.apache.cassandra.db.Memtable$FlushRunnable.writeSortedContents(Memtable.java:489)
        at org.apache.cassandra.db.Memtable$FlushRunnable.runWith(Memtable.java:448)
        at org.apache.cassandra.io.util.DiskAwareRunnable.runMayThrow(DiskAwareRunnable.java:48)
        at org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:28)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)


I looked into the code and it seems to be coming from the following code:

    public void serialize(IColumn column, DataOutput dos) throws IOException
    {
        assert column.name().remaining() > 0; // crash
        ByteBufferUtil.writeWithShortLength(column.name(), dos);
        try
        {...


Does anybody have an idea why this is happening? The machine has some issues with its disks, but flush shouldn't be affected by bad disks, right? I can rule out that this memtable was filled by a bad commitlog.

Thanks,
Christian