Fix compaction not removing columns when bf_fp_ratio is 1; patch by yukim, 
reviewed by jbellis and pcmanus for CASSANDRA-5182


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6415d6be
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6415d6be
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6415d6be

Branch: refs/heads/trunk
Commit: 6415d6bee2815e9267cae002bf873fce8073b347
Parents: b7e1082
Author: Yuki Morishita <[email protected]>
Authored: Tue Feb 5 13:09:06 2013 -0600
Committer: Yuki Morishita <[email protected]>
Committed: Mon Mar 4 13:35:56 2013 -0600

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../db/compaction/CompactionController.java        |   12 ++++++++++--
 2 files changed, 11 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/6415d6be/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 04dcee7..924eeeb 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -10,6 +10,7 @@
  * Handle null values when executing prepared statement (CASSANDRA-5081)
  * Add netty to pom dependencies (CASSANDRA-5181)
  * Include type arguments in Thrift CQLPreparedResult (CASSANDRA-5311)
+ * Fix compaction not removing columns when bf_fp_ratio is 1 (CASSANDRA-5182)
 Merged from 1.1:
  * nodetool: ability to repair specific range (CASSANDRA-5280)
  * Fix possible assertion triggered in SliceFromReadCommand (CASSANDRA-5284)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/6415d6be/src/java/org/apache/cassandra/db/compaction/CompactionController.java
----------------------------------------------------------------------
diff --git 
a/src/java/org/apache/cassandra/db/compaction/CompactionController.java 
b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
index ff3de53..f3198ff 100644
--- a/src/java/org/apache/cassandra/db/compaction/CompactionController.java
+++ b/src/java/org/apache/cassandra/db/compaction/CompactionController.java
@@ -34,6 +34,7 @@ import 
org.apache.cassandra.io.sstable.SSTableIdentityIterator;
 import org.apache.cassandra.io.sstable.SSTableReader;
 import org.apache.cassandra.service.CacheService;
 import org.apache.cassandra.service.StorageService;
+import org.apache.cassandra.utils.AlwaysPresentFilter;
 import org.apache.cassandra.utils.Throttle;
 
 /**
@@ -114,8 +115,15 @@ public class CompactionController
         List<SSTableReader> filteredSSTables = overlappingTree.search(key);
         for (SSTableReader sstable : filteredSSTables)
         {
-            if (sstable.getBloomFilter().isPresent(key.key) && 
sstable.getMinTimestamp() <= maxDeletionTimestamp)
-                return false;
+            if (sstable.getMinTimestamp() <= maxDeletionTimestamp)
+            {
+                // if we don't have bloom filter(bf_fp_chance=1.0 or filter 
file is missing),
+                // we check index file instead.
+                if (sstable.getBloomFilter() instanceof AlwaysPresentFilter && 
sstable.getPosition(key, SSTableReader.Operator.EQ) != null)
+                    return false;
+                else if (sstable.getBloomFilter().isPresent(key.key))
+                    return false;
+            }
         }
         return true;
     }

Reply via email to