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; }
