Author: slebresne Date: Fri May 27 21:08:39 2011 New Revision: 1128457 URL: http://svn.apache.org/viewvc?rev=1128457&view=rev Log: Committing fix to CASSANDRA-2675 in that branch (since it is very problematic with counters)
Modified: cassandra/branches/cassandra-0.8.0/CHANGES.txt cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/ColumnFamily.java cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/filter/QueryFilter.java Modified: cassandra/branches/cassandra-0.8.0/CHANGES.txt URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8.0/CHANGES.txt?rev=1128457&r1=1128456&r2=1128457&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8.0/CHANGES.txt (original) +++ cassandra/branches/cassandra-0.8.0/CHANGES.txt Fri May 27 21:08:39 2011 @@ -11,6 +11,7 @@ * fix exception adding validators to non-string columns (CASSANDRA-2696) * avoid instantiating DatabaseDescriptor in JDBC (CASSANDRA-2694) * fix potential stack overflow during compaction (CASSANDRA-2626) + * clone super columns to avoid modifying them during flush (CASSANDRA-2675) 0.8.0-rc1 Modified: cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/ColumnFamily.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/ColumnFamily.java?rev=1128457&r1=1128456&r2=1128457&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/ColumnFamily.java (original) +++ cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/ColumnFamily.java Fri May 27 21:08:39 2011 @@ -142,6 +142,11 @@ public class ColumnFamily implements ICo return columns.size(); } + public boolean isEmpty() + { + return columns.isEmpty(); + } + public boolean isSuper() { return getType() == ColumnFamilyType.Super; Modified: cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/filter/QueryFilter.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/filter/QueryFilter.java?rev=1128457&r1=1128456&r2=1128457&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/filter/QueryFilter.java (original) +++ cassandra/branches/cassandra-0.8.0/src/java/org/apache/cassandra/db/filter/QueryFilter.java Fri May 27 21:08:39 2011 @@ -103,7 +103,19 @@ public class QueryFilter public void reduce(IColumn current) { - curCF.addColumn(current); + if (curCF.isSuper() && curCF.isEmpty()) + { + // If it is the first super column we add, we must clone it since other super column may modify + // it otherwise and it could be aliased in a memtable somewhere. We'll also don't have to care about what + // consumers make of the result (for instance CFS.getColumnFamily() call removeDeleted() on the + // result which removes column; which shouldn't be done on the original super column). + assert current instanceof SuperColumn; + curCF.addColumn(((SuperColumn)current).cloneMe()); + } + else + { + curCF.addColumn(current); + } } protected IColumn getReduced()