Updated Branches: refs/heads/trunk b2ba251ac -> 778b6a0eb
Fix dealing with ridiculously large max sstable sizes in LCS patch by jbellis; reviewed by marcuse for CASSANDRA-5589 Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/03f01166 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/03f01166 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/03f01166 Branch: refs/heads/trunk Commit: 03f0116611795836009ea488dd8035b70641ecb3 Parents: cc301de Author: Jonathan Ellis <[email protected]> Authored: Thu May 23 14:50:49 2013 -0500 Committer: Jonathan Ellis <[email protected]> Committed: Thu May 23 14:50:49 2013 -0500 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../db/compaction/LeveledCompactionStrategy.java | 5 +++++ .../cassandra/db/compaction/LeveledManifest.java | 6 ++++-- 3 files changed, 10 insertions(+), 2 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/03f01166/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 66c5f04..b687570 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 1.2.6 + * Fix dealing with ridiculously large max sstable sizes in LCS (CASSANDRA-5589) * Ignore pre-truncate hints (CASSANDRA-4655) * Move System.exit on OOM into a separate thread (CASSANDRA-5273) * Write row markers when serializing schema (CASSANDRA-5572) http://git-wip-us.apache.org/repos/asf/cassandra/blob/03f01166/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java index f964297..52c03fc 100644 --- a/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java +++ b/src/java/org/apache/cassandra/db/compaction/LeveledCompactionStrategy.java @@ -57,6 +57,11 @@ public class LeveledCompactionStrategy extends AbstractCompactionStrategy implem { String value = options.containsKey(SSTABLE_SIZE_OPTION) ? options.get(SSTABLE_SIZE_OPTION) : "5"; configuredMaxSSTableSize = Integer.parseInt(value); + if (configuredMaxSSTableSize >= 1000) + { + // Yes, people have done this + logger.warn("Max sstable size of {}MB is configured; having a unit of compaction this large is probably a bad idea", configuredMaxSSTableSize); + } } maxSSTableSizeInMB = configuredMaxSSTableSize; http://git-wip-us.apache.org/repos/asf/cassandra/blob/03f01166/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java index 864e70c..f62c796 100644 --- a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java +++ b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java @@ -70,8 +70,10 @@ public class LeveledManifest this.cfs = cfs; this.maxSSTableSizeInBytes = maxSSTableSizeInMB * 1024 * 1024; - // allocate enough generations for a PB of data - int n = (int) Math.log10(1000 * 1000 * 1000 / maxSSTableSizeInMB); + // allocate enough generations for a PB of data, with a 1-MB sstable size. (Note that if maxSSTableSize is + // updated, we will still have sstables of the older, potentially smaller size. So don't make this + // dependent on maxSSTableSize.) + int n = (int) Math.log10(1000 * 1000 * 1000); generations = new List[n]; lastCompactedKeys = new RowPosition[n]; for (int i = 0; i < generations.length; i++)
