diff --git a/CHANGES.txt b/CHANGES.txt index cf4c20644e..ca9b6b3b21 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -34,6 +34,7 @@ Merged from 3.11: * Update Jackson from 2.9.10 to 2.12.5 (CASSANDRA-16851) * Make assassinate more resilient to missing tokens (CASSANDRA-16847) Merged from 3.0: + * Fix conversion from megabits to bytes in streaming rate limiter (CASSANDRA-17243) * Upgrade logback to 1.2.9 (CASSANDRA-17204) * Avoid race in AbstractReplicationStrategy endpoint caching (CASSANDRA-16673) * Fix abort when window resizing during cqlsh COPY (CASSANDRA-15230) diff --git a/NEWS.txt b/NEWS.txt index 749b5317fc..1649ccdf80 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -44,6 +44,12 @@ New features Upgrading --------- + - The config properties for setting the streaming throughput `stream_throughput_outbound_megabits_per_sec` and + `inter_dc_stream_throughput_outbound_megabits_per_sec` were incorrectly interpreted as mebibits. This has + been fixed by CASSANDRA-17243, so the values for these properties will now indicate a throughput ~4.6% lower than + what was actually applied in previous versions. This also affects the setters and getters for these properties in + the JMX MBean `org.apache.cassandra.db:type=StorageService` and the nodetool commands `set/getstreamthroughput` + and `set/getinterdcstreamthroughput`. - Before you upgrade, if you are using `cassandra.auth_bcrypt_gensalt_log2_rounds` property, confirm it is set to value lower than 31 otherwise Cassandra will fail to start. See CASSANDRA-9384 for further details. You also need to regenerate passwords for users for who the password diff --git a/src/java/org/apache/cassandra/streaming/StreamManager.java b/src/java/org/apache/cassandra/streaming/StreamManager.java index c8c091d486..849f7b5112 100644 --- a/src/java/org/apache/cassandra/streaming/StreamManager.java +++ b/src/java/org/apache/cassandra/streaming/StreamManager.java @@ -63,7 +63,7 @@ public class StreamManager implements StreamManagerMBean public static class StreamRateLimiter { - public static final double BYTES_PER_MEGABIT = (1024 * 1024) / 8; // from bits + public static final double BYTES_PER_MEGABIT = (1000 * 1000) / 8.0; private static final RateLimiter limiter = RateLimiter.create(calculateRateInBytes()); private static final RateLimiter interDCLimiter = RateLimiter.create(calculateInterDCRateInBytes()); private final boolean isLocalDC;