You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2012/01/11 20:50:52 UTC
[4/5] git commit: Avoid < 0 value for pending tasks in leveled
compaction
Avoid < 0 value for pending tasks in leveled compaction
patch by jbellis; reviewed by slebresne for CASSANDRA-3693
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/10a8f677
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/10a8f677
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/10a8f677
Branch: refs/heads/trunk
Commit: 10a8f67783d9987063424212129be29690628bca
Parents: 2bb862c
Author: Sylvain Lebresne <sy...@datastax.com>
Authored: Wed Jan 11 08:52:42 2012 +0100
Committer: Sylvain Lebresne <sy...@datastax.com>
Committed: Wed Jan 11 08:54:44 2012 +0100
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/db/compaction/LeveledManifest.java | 20 +++++++++-----
2 files changed, 14 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/10a8f677/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 09bb85d..b31f3a0 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -19,6 +19,7 @@
* Don't ignore IOException during compaction (CASSANDRA-3655)
* Fix assertion error for CF with gc_grace=0 (CASSANDRA-3579)
* Shutdown ParallelCompaction reducer executor after use (CASSANDRA-3711)
+ * Avoid < 0 value for pending tasks in leveled compaction (CASSANDRA-3693)
Merged from 0.8:
* avoid logging (harmless) exception when GC takes < 1ms (CASSANDRA-3656)
* prevent new nodes from thinking down nodes are up forever (CASSANDRA-3626)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/10a8f677/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 f61a26a..40a0a17 100644
--- a/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
+++ b/src/java/org/apache/cassandra/db/compaction/LeveledManifest.java
@@ -27,6 +27,7 @@ import java.io.IOException;
import java.util.*;
import com.google.common.collect.Iterables;
+import com.google.common.primitives.Ints;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -202,11 +203,14 @@ public class LeveledManifest
return builder.toString();
}
- private double maxBytesForLevel (int level)
+ private long maxBytesForLevel(int level)
{
- return level == 0
- ? 4 * maxSSTableSizeInMB * 1024 * 1024
- : Math.pow(10, level) * maxSSTableSizeInMB * 1024 * 1024;
+ if (level == 0)
+ return 4 * maxSSTableSizeInMB * 1024 * 1024;
+ double bytes = Math.pow(10, level) * maxSSTableSizeInMB * 1024 * 1024;
+ if (bytes > Long.MAX_VALUE)
+ throw new RuntimeException("At most " + Long.MAX_VALUE + " bytes may be in a compaction level; your maxSSTableSize must be absurdly high to compute " + bytes);
+ return (long) bytes;
}
public synchronized Collection<SSTableReader> getCompactionCandidates()
@@ -424,12 +428,14 @@ public class LeveledManifest
public int getEstimatedTasks()
{
- int n = 0;
+ long tasks = 0;
for (int i = generations.length - 1; i >= 0; i--)
{
List<SSTableReader> sstables = generations[i];
- n += Math.max(0L, SSTableReader.getTotalBytes(sstables) - maxBytesForLevel(i)) / (maxSSTableSizeInMB * 1024 * 1024);
+ long n = Math.max(0L, SSTableReader.getTotalBytes(sstables) - maxBytesForLevel(i)) / (maxSSTableSizeInMB * 1024 * 1024);
+ logger.debug("Estimating " + n + " compaction tasks in level " + i);
+ tasks += n;
}
- return n;
+ return Ints.checkedCast(tasks);
}
}