Author: slebresne
Date: Fri Dec  2 15:30:40 2011
New Revision: 1209530

URL: http://svn.apache.org/viewvc?rev=1209530&view=rev
Log:
Remove columns shadowed by a deleted container even when we cannot purge
patch by slebresne; reviewed by jbellis for CASSANDRA-3538

Modified:
    cassandra/trunk/CHANGES.txt
    
cassandra/trunk/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java

Modified: cassandra/trunk/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1209530&r1=1209529&r2=1209530&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Fri Dec  2 15:30:40 2011
@@ -15,6 +15,8 @@
  * always remove endpoints from delevery queue in HH (CASSANDRA-3546)
  * fix race between cf flush and its 2ndary indexes flush (CASSANDRA-3547)
  * fix potential race in AES when a repair fails (CASSANDRA-3548)
+ * Remove columns shadowed by a deleted container even when we cannot purge
+   (CASSANDRA-3538)
 
 
 1.0.5

Modified: 
cassandra/trunk/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
URL: 
http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java?rev=1209530&r1=1209529&r2=1209530&view=diff
==============================================================================
--- 
cassandra/trunk/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
 (original)
+++ 
cassandra/trunk/src/java/org/apache/cassandra/db/compaction/PrecompactedRow.java
 Fri Dec  2 15:30:40 2011
@@ -64,9 +64,10 @@ public class PrecompactedRow extends Abs
 
         if (cf.hasExpiredTombstones(controller.gcBefore))
             shouldPurge = controller.shouldPurge(key);
-        ColumnFamily compacted = shouldPurge != null && shouldPurge
-                               ? ColumnFamilyStore.removeDeleted(cf, 
controller.gcBefore)
-                               : cf;
+        // We should only gc tombstone if shouldPurge == true. But otherwise,
+        // it is still ok to collect column that shadowed by their (deleted)
+        // container, which removeDeleted(cf, Integer.MAX_VALUE) will do
+        ColumnFamily compacted = ColumnFamilyStore.removeDeleted(cf, 
shouldPurge != null && shouldPurge ? controller.gcBefore : Integer.MIN_VALUE);
 
         if (compacted != null && 
compacted.metadata().getDefaultValidator().isCommutative())
         {
@@ -81,7 +82,8 @@ public class PrecompactedRow extends Abs
 
     public static ColumnFamily removeDeletedAndOldShards(DecoratedKey key, 
boolean shouldPurge, CompactionController controller, ColumnFamily cf)
     {
-        ColumnFamily compacted = shouldPurge ? 
ColumnFamilyStore.removeDeleted(cf, controller.gcBefore) : cf;
+        // See comment in preceding method
+        ColumnFamily compacted = ColumnFamilyStore.removeDeleted(cf, 
shouldPurge ? controller.gcBefore : Integer.MIN_VALUE);
         if (shouldPurge && compacted != null && 
compacted.metadata().getDefaultValidator().isCommutative())
             CounterColumn.mergeAndRemoveOldShards(key, compacted, 
controller.gcBefore, controller.mergeShardBefore);
         return compacted;


Reply via email to