Reduce garbage created by DynamicSnitch Patch by Blake Eggleston; Reviewed by Jason Brown for CASSANDRA-14091
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/10ca7e47 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/10ca7e47 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/10ca7e47 Branch: refs/heads/trunk Commit: 10ca7e47ca63c43b4e0ba593fb4c736130764af9 Parents: 05cb556 Author: Blake Eggleston <bdeggles...@gmail.com> Authored: Fri Dec 1 15:04:12 2017 -0800 Committer: Blake Eggleston <bdeggles...@gmail.com> Committed: Tue Dec 5 16:05:07 2017 -0800 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../cassandra/locator/DynamicEndpointSnitch.java | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/10ca7e47/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 2683dc2..cf8883a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 3.0.16 + * Reduce garbage created by DynamicSnitch (CASSANDRA-14091) * More frequent commitlog chained markers (CASSANDRA-13987) * Fix serialized size of DataLimits (CASSANDRA-14057) * Add flag to allow dropping oversized read repair mutations (CASSANDRA-13975) http://git-wip-us.apache.org/repos/asf/cassandra/blob/10ca7e47/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java ---------------------------------------------------------------------- diff --git a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java index 9c0c57e..8c255f5 100644 --- a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java +++ b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java @@ -29,6 +29,7 @@ import com.codahale.metrics.ExponentiallyDecayingReservoir; import javax.management.MBeanServer; import javax.management.ObjectName; +import com.codahale.metrics.Snapshot; import org.apache.cassandra.concurrent.ScheduledExecutors; import org.apache.cassandra.config.DatabaseDescriptor; import org.apache.cassandra.net.MessagingService; @@ -265,19 +266,26 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements ILa } double maxLatency = 1; + + Map<InetAddress, Snapshot> snapshots = new HashMap<>(samples.size()); + for (Map.Entry<InetAddress, ExponentiallyDecayingReservoir> entry : samples.entrySet()) + { + snapshots.put(entry.getKey(), entry.getValue().getSnapshot()); + } + // We're going to weight the latency for each host against the worst one we see, to // arrive at sort of a 'badness percentage' for them. First, find the worst for each: HashMap<InetAddress, Double> newScores = new HashMap<>(); - for (Map.Entry<InetAddress, ExponentiallyDecayingReservoir> entry : samples.entrySet()) + for (Map.Entry<InetAddress, Snapshot> entry : snapshots.entrySet()) { - double mean = entry.getValue().getSnapshot().getMedian(); + double mean = entry.getValue().getMedian(); if (mean > maxLatency) maxLatency = mean; } // now make another pass to do the weighting based on the maximums we found before - for (Map.Entry<InetAddress, ExponentiallyDecayingReservoir> entry: samples.entrySet()) + for (Map.Entry<InetAddress, Snapshot> entry : snapshots.entrySet()) { - double score = entry.getValue().getSnapshot().getMedian() / maxLatency; + double score = entry.getValue().getMedian() / maxLatency; // finally, add the severity without any weighting, since hosts scale this relative to their own load and the size of the task causing the severity. // "Severity" is basically a measure of compaction activity (CASSANDRA-3722). if (USE_SEVERITY) --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org