Make changes to compaction throughput be applied in real time patch by soumava; reviewed by kohlisankalp for CASSANDRA-10025
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/dd2006b0 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/dd2006b0 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/dd2006b0 Branch: refs/heads/cassandra-3.3 Commit: dd2006b0c1053e9b536ac5ec66f38646d764cb6f Parents: 3aaae7a Author: Soumava Ghosh <soum...@utexas.edu> Authored: Fri Jan 22 16:19:50 2016 +0100 Committer: Sylvain Lebresne <sylv...@datastax.com> Committed: Fri Jan 22 16:19:50 2016 +0100 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../db/compaction/CompactionManager.java | 25 +++++++++++++------- .../cassandra/service/StorageService.java | 1 + 3 files changed, 19 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/dd2006b0/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 37a0137..dcaccfc 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.2.5 + * Apply change to compaction throughput in real time (CASSANDRA-10025) * Fix potential NPE on ORDER BY queries with IN (CASSANDRA-10955) * Avoid over-fetching during the page of range queries (CASSANDRA-8521) * Start L0 STCS-compactions even if there is a L0 -> L1 compaction http://git-wip-us.apache.org/repos/asf/cassandra/blob/dd2006b0/src/java/org/apache/cassandra/db/compaction/CompactionManager.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java index ae2b6fb..c51ed7d 100644 --- a/src/java/org/apache/cassandra/db/compaction/CompactionManager.java +++ b/src/java/org/apache/cassandra/db/compaction/CompactionManager.java @@ -114,24 +114,33 @@ public class CompactionManager implements CompactionManagerMBean private final RateLimiter compactionRateLimiter = RateLimiter.create(Double.MAX_VALUE); /** - * Gets compaction rate limiter. When compaction_throughput_mb_per_sec is 0 or node is bootstrapping, - * this returns rate limiter with the rate of Double.MAX_VALUE bytes per second. + * Gets compaction rate limiter. * Rate unit is bytes per sec. * * @return RateLimiter with rate limit set */ public RateLimiter getRateLimiter() { - double currentThroughput = DatabaseDescriptor.getCompactionThroughputMbPerSec() * 1024.0 * 1024.0; - // if throughput is set to 0, throttling is disabled - if (currentThroughput == 0 || StorageService.instance.isBootstrapMode()) - currentThroughput = Double.MAX_VALUE; - if (compactionRateLimiter.getRate() != currentThroughput) - compactionRateLimiter.setRate(currentThroughput); + setRate(DatabaseDescriptor.getCompactionThroughputMbPerSec()); return compactionRateLimiter; } /** + * Sets the rate for the rate limiter. When compaction_throughput_mb_per_sec is 0 or node is bootstrapping, + * this sets the rate to Double.MAX_VALUE bytes per second. + * @param throughPutMbPerSec throughput to set in mb per second + */ + public void setRate(final double throughPutMbPerSec) + { + double throughput = throughPutMbPerSec * 1024.0 * 1024.0; + // if throughput is set to 0, throttling is disabled + if (throughput == 0 || StorageService.instance.isBootstrapMode()) + throughput = Double.MAX_VALUE; + if (compactionRateLimiter.getRate() != throughput) + compactionRateLimiter.setRate(throughput); + } + + /** * Call this whenever a compaction might be needed on the given columnfamily. * It's okay to over-call (within reason) if a call is unnecessary, it will * turn into a no-op in the bucketing/candidate-scan phase. http://git-wip-us.apache.org/repos/asf/cassandra/blob/dd2006b0/src/java/org/apache/cassandra/service/StorageService.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 34419e9..09c20e9 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -1158,6 +1158,7 @@ public class StorageService extends NotificationBroadcasterSupport implements IE public void setCompactionThroughputMbPerSec(int value) { DatabaseDescriptor.setCompactionThroughputMbPerSec(value); + CompactionManager.instance.setRate(value); } public boolean isIncrementalBackupsEnabled()