incubator-cassandra-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Robert Coli <rc...@eventbrite.com>
Subject Re: setcompactionthroughput and setstreamthroughput have no effect
Date Mon, 29 Apr 2013 23:13:31 GMT
On Mon, Apr 29, 2013 at 3:52 PM, John Watson <john@disqus.com> wrote:
> Same behavior on 1.1.3, 1.1.5 and 1.1.9.
> Currently: 1.2.3

(below snippets are from trunk)

./src/java/org/apache/cassandra/tools/NodeCmd.java
"
            case SETCOMPACTIONTHROUGHPUT :
                    if (arguments.length != 1) { badUse("Missing value
argument."); }

probe.setCompactionThroughput(Integer.parseInt(arguments[0]));
                    break;
"

./src/java/org/apache/cassandra/tools/NodeProbe.java
"
  public void setCompactionThroughput(int value)
    {
        ssProxy.setCompactionThroughputMbPerSec(value);
"

./src/java/org/apache/cassandra/service/StorageService.java
"
  public void setCompactionThroughputMbPerSec(int value)
    {
        DatabaseDescriptor.setCompactionThroughputMbPerSec(value);
    }
"
./src/java/org/apache/cassandra/config/DatabaseDescriptor.java
"
    public static void setCompactionThroughputMbPerSec(int value)
    {
        conf.compaction_throughput_mb_per_sec = value;
    }
...
   public static int getCompactionThroughputMbPerSec()
    {
        return conf.compaction_throughput_mb_per_sec;
    }
"

./src/java/org/apache/cassandra/db/compaction/CompactionController.java
"
     public int targetThroughput()
        {
            if (DatabaseDescriptor.getCompactionThroughputMbPerSec() <
1 || StorageService.instance.isBootstrapMode())
                // throttling disabled
                return 0;
            // total throughput
            int totalBytesPerMS =
DatabaseDescriptor.getCompactionThroughputMbPerSec() * 1024 * 1024 /
1000;
            // per stream throughput (target bytes per MS)
            return totalBytesPerMS / Math.max(1,
CompactionManager.instance.getActiveCompactions())
"

So, a value of "0" means "disable throttling".

./src/java/org/apache/cassandra/utils/Throttle.java
"
        int newTargetBytesPerMS = fun.targetThroughput();
        if (newTargetBytesPerMS < 1)
            // throttling disabled
            return;
"

And returning 0 from targetThroughput should result in throttling
being disabled.

I see in the actual throttle code this log line :

                logger.trace(String.format("%s actual throughput was
%d bytes in %d ms: throttling for %d ms",

So you could enable TRACE log level for this class to determine if
it's making it into that codepath.

As an aside, there is no bounds checking when setting configuration
options via JMX. Be careful.

https://issues.apache.org/jira/browse/CASSANDRA-4967

=Rob

Mime
View raw message