You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ma...@apache.org on 2016/03/16 09:37:54 UTC
[04/10] cassandra git commit: Fix bloom filter sizing with LCS
Fix bloom filter sizing with LCS
Patch by marcuse; reviewed by Paulo Motta for CASSANDRA-11344
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/a48b836b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/a48b836b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/a48b836b
Branch: refs/heads/trunk
Commit: a48b836b15fe548334eb302051b34bd5554fa8f9
Parents: 719caa6
Author: Marcus Eriksson <ma...@apache.org>
Authored: Fri Mar 11 09:36:05 2016 +0100
Committer: Marcus Eriksson <ma...@apache.org>
Committed: Wed Mar 16 09:17:30 2016 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../writers/MaxSSTableSizeWriter.java | 27 ++++++++++++--------
2 files changed, 17 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a48b836b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index b37ef84..a69164e 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
2.2.6
+ * Fix bloom filter sizing with LCS (CASSANDRA-11344)
* (cqlsh) Fix error when result is 0 rows with EXPAND ON (CASSANDRA-11092)
* Fix intra-node serialization issue for multicolumn-restrictions (CASSANDRA-11196)
* Non-obsoleting compaction operations over compressed files can impose rate limit on normal reads (CASSANDRA-11301)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/a48b836b/src/java/org/apache/cassandra/db/compaction/writers/MaxSSTableSizeWriter.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/compaction/writers/MaxSSTableSizeWriter.java b/src/java/org/apache/cassandra/db/compaction/writers/MaxSSTableSizeWriter.java
index d30a612..2bae3b8 100644
--- a/src/java/org/apache/cassandra/db/compaction/writers/MaxSSTableSizeWriter.java
+++ b/src/java/org/apache/cassandra/db/compaction/writers/MaxSSTableSizeWriter.java
@@ -32,7 +32,6 @@ import org.apache.cassandra.io.sstable.metadata.MetadataCollector;
public class MaxSSTableSizeWriter extends CompactionAwareWriter
{
- private final long estimatedTotalKeys;
private final long expectedWriteSize;
private final long maxSSTableSize;
private final int level;
@@ -46,10 +45,9 @@ public class MaxSSTableSizeWriter extends CompactionAwareWriter
this.allSSTables = txn.originals();
this.level = level;
this.maxSSTableSize = maxSSTableSize;
- long totalSize = cfs.getExpectedCompactedFileSize(nonExpiredSSTables, compactionType);
+ long totalSize = getTotalWriteSize(nonExpiredSSTables, estimatedTotalKeys, cfs, compactionType);
expectedWriteSize = Math.min(maxSSTableSize, totalSize);
- estimatedTotalKeys = SSTableReader.getApproximateKeyCount(nonExpiredSSTables);
- estimatedSSTables = Math.max(1, estimatedTotalKeys / maxSSTableSize);
+ estimatedSSTables = Math.max(1, totalSize / maxSSTableSize);
File sstableDirectory = cfs.directories.getLocationForDisk(getWriteDirectory(expectedWriteSize));
@SuppressWarnings("resource")
SSTableWriter writer = SSTableWriter.create(Descriptor.fromFilename(cfs.getTempSSTablePath(sstableDirectory)),
@@ -61,6 +59,19 @@ public class MaxSSTableSizeWriter extends CompactionAwareWriter
sstableWriter.switchWriter(writer);
}
+ /**
+ * Gets the estimated total amount of data to write during compaction
+ */
+ private static long getTotalWriteSize(Iterable<SSTableReader> nonExpiredSSTables, long estimatedTotalKeys, ColumnFamilyStore cfs, OperationType compactionType)
+ {
+ long estimatedKeysBeforeCompaction = 0;
+ for (SSTableReader sstable : nonExpiredSSTables)
+ estimatedKeysBeforeCompaction += sstable.estimatedKeys();
+ estimatedKeysBeforeCompaction = Math.max(1, estimatedKeysBeforeCompaction);
+ double estimatedCompactionRatio = (double) estimatedTotalKeys / estimatedKeysBeforeCompaction;
+ return Math.round(estimatedCompactionRatio * cfs.getExpectedCompactedFileSize(nonExpiredSSTables, compactionType));
+ }
+
@Override
public boolean append(AbstractCompactedRow row)
{
@@ -80,10 +91,4 @@ public class MaxSSTableSizeWriter extends CompactionAwareWriter
}
return rie != null;
}
-
- @Override
- public long estimatedKeys()
- {
- return estimatedTotalKeys;
- }
-}
\ No newline at end of file
+}