[ https://issues.apache.org/jira/browse/CASSANDRA-2949?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Sylvain Lebresne updated CASSANDRA-2949: ---------------------------------------- Attachment: 2949_v2.patch The patch does fix it, but I think there is a better fix. The reason the assertion is triggered is because when we read to replicate and there is super columns, we end up adding one read command for each super column (and thus get back multiple time the same CF, which triggers the assertion). The rational being that we only query the subcolumns that are in the original mutation. However, since we deserialize full super columns anyway, it will be more efficient to generate only one read command for all the super columns (reading full super columns) and to filter afterwards the subcolumns we don't want to bother sending to the other nodes. Attaching a "v2" patch that does this. It also ship with a unit test. > Batch mutation of counters in multiple supercolumns throws an exception > during replication. > ------------------------------------------------------------------------------------------- > > Key: CASSANDRA-2949 > URL: https://issues.apache.org/jira/browse/CASSANDRA-2949 > Project: Cassandra > Issue Type: Bug > Components: Core > Affects Versions: 0.8.2 > Reporter: Sam Overton > Assignee: Sylvain Lebresne > Priority: Critical > Labels: batch_mutate, counters, supercolumns > Attachments: 2949.patch, 2949_v2.patch > > > Steps to reproduce: > * Perform a batch mutation of more than one counter in more than one > super-column in the same column-family. > * The following exception is thrown during replication: > DEBUG [MutationStage:63] 2011-07-26 17:05:12,653 > CounterMutationVerbHandler.java (line 52) Applying forwarded > CounterMutation(RowMutation(keyspace='ks1', key='4ae71336e44bf9bf', > modifications=[ColumnFamily(cf1 [SuperColumn(302c7375706572636f6c30 > [302c636f6c30:false:8@1311696312648,]),SuperColumn(302c7375706572636f6c31 > [302c636f6c30:false:8@1311696312648,]),])]), QUORUM) > DEBUG [MutationStage:63] 2011-07-26 17:05:12,653 StorageProxy.java (line 432) > insert writing local & replicate CounterMutation(RowMutation(keyspace='ks1', > key='4ae71336e44bf9bf', modifications=[cf1]), QUORUM) > DEBUG [MutationStage:63] 2011-07-26 17:05:12,654 Table.java (line 398) > applying mutation of row 4ae71336e44bf9bf > ERROR [ReplicateOnWriteStage:125] 2011-07-26 17:05:12,655 > AbstractCassandraDaemon.java (line 139) Fatal exception in thread > Thread[ReplicateOnWriteStage:125,5,main] > java.lang.RuntimeException: java.lang.IllegalArgumentException: ColumnFamily > ColumnFamily(cf1 [SuperColumn(302c7375706572636f6c31 > [302c636f6c30:false:[{cad93dc0-b7a0-11e0-0000-123f813dd5df, 3, > 3}*]@1311696312648!-9223372036854775808,]),]) already has modifications in > this mutation: ColumnFamily(cf1 [SuperColumn(302c7375706572636f6c30 > [302c636f6c30:false:[{cad93dc0-b7a0-11e0-0000-123f813dd5df, 3, > 3}*]@1311696312648!-9223372036854775808,]),]) > at > org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:34) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) > at java.lang.Thread.run(Thread.java:636) > Caused by: java.lang.IllegalArgumentException: ColumnFamily ColumnFamily(cf1 > [SuperColumn(302c7375706572636f6c31 > [302c636f6c30:false:[{cad93dc0-b7a0-11e0-0000-123f813dd5df, 3, > 3}*]@1311696312648!-9223372036854775808,]),]) already has modifications in > this mutation: ColumnFamily(cf1 [SuperColumn(302c7375706572636f6c30 > [302c636f6c30:false:[{cad93dc0-b7a0-11e0-0000-123f813dd5df, 3, > 3}*]@1311696312648!-9223372036854775808,]),]) > at org.apache.cassandra.db.RowMutation.add(RowMutation.java:123) > at > org.apache.cassandra.db.CounterMutation.makeReplicationMutation(CounterMutation.java:120) > at > org.apache.cassandra.service.StorageProxy$5$1.runMayThrow(StorageProxy.java:455) > at > org.apache.cassandra.utils.WrappedRunnable.run(WrappedRunnable.java:30) > ... 3 more -- This message is automatically generated by JIRA. For more information on JIRA, see: http://www.atlassian.com/software/jira