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;