You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2018/02/17 15:31:10 UTC

[2/3] cassandra git commit: RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter

RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter

patch by Nate McCall; reviewed by jasobrown for CASSANDRA-14163


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/0ab9fc4b
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/0ab9fc4b
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/0ab9fc4b

Branch: refs/heads/trunk
Commit: 0ab9fc4b73eeadff369435bcdf8b03310a34940c
Parents: 515f07b
Author: Nate McCall <zz...@gmail.com>
Authored: Sat Feb 17 07:29:17 2018 -0800
Committer: Jason Brown <ja...@gmail.com>
Committed: Sat Feb 17 07:29:17 2018 -0800

----------------------------------------------------------------------
 CHANGES.txt                                          |  1 +
 .../apache/cassandra/net/RateBasedBackPressure.java  | 15 +++++++++------
 2 files changed, 10 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ab9fc4b/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index e858781..022807f 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
 3.11.3
+ * RateBasedBackPressure unnecessarily invokes a lock on the Guava RateLimiter (CASSANDRA-14163)
  * Fix wildcard GROUP BY queries (CASSANDRA-14209)
 Merged from 2.1
  * CVE-2017-5929 Security vulnerability in Logback warning in NEWS.txt (CASSANDRA-14183)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/0ab9fc4b/src/java/org/apache/cassandra/net/RateBasedBackPressure.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/net/RateBasedBackPressure.java b/src/java/org/apache/cassandra/net/RateBasedBackPressure.java
index 1dae243..565bf4c 100644
--- a/src/java/org/apache/cassandra/net/RateBasedBackPressure.java
+++ b/src/java/org/apache/cassandra/net/RateBasedBackPressure.java
@@ -161,12 +161,13 @@ public class RateBasedBackPressure implements BackPressureStrategy<RateBasedBack
                         double actualRatio = incomingRate / outgoingRate;
 
                         // If the ratio is above the high mark, try growing by the back-pressure factor:
+                        double limiterRate = limiter.getRate();
                         if (actualRatio >= highRatio)
                         {
                             // Only if the outgoing rate is able to keep up with the rate increase:
-                            if (limiter.getRate() <= outgoingRate)
+                            if (limiterRate <= outgoingRate)
                             {
-                                double newRate = limiter.getRate() + ((limiter.getRate() * factor) / 100);
+                                double newRate = limiterRate + ((limiterRate * factor) / 100);
                                 if (newRate > 0 && newRate != Double.POSITIVE_INFINITY)
                                 {
                                     limiter.setRate(newRate);
@@ -178,14 +179,16 @@ public class RateBasedBackPressure implements BackPressureStrategy<RateBasedBack
                         {
                             // Only if the new rate is actually less than the actual rate:
                             double newRate = incomingRate - ((incomingRate * factor) / 100);
-                            if (newRate > 0 && newRate < limiter.getRate())
+                            if (newRate > 0 && newRate < limiterRate)
                             {
                                 limiter.setRate(newRate);
                             }
                         }
-
-                        logger.trace("Back-pressure state for {}: incoming rate {}, outgoing rate {}, ratio {}, rate limiting {}",
-                                     backPressure.getHost(), incomingRate, outgoingRate, actualRatio, limiter.getRate());
+                        if (logger.isTraceEnabled())
+                        {
+                            logger.trace("Back-pressure state for {}: incoming rate {}, outgoing rate {}, ratio {}, rate limiting {}",
+                                         backPressure.getHost(), incomingRate, outgoingRate, actualRatio, limiter.getRate());
+                        }
                     }
                     // Otherwise reset the rate limiter:
                     else


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org