From a4544615dfcbd80122e75c1ba6288a4f17bb4389 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Fri, 11 Jul 2014 23:49:36 -0500 Subject: [PATCH] Fix range merging when DES scores are zero patch by thobbs; reviewed by jbellis for CASSANDRA-7535 --- CHANGES.txt | 1 + .../apache/cassandra/locator/DynamicEndpointSnitch.java | 7 ++++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGES.txt b/CHANGES.txt index d39cf63a29..e1c89220bf 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.0.10 + * Fix range merging when DES scores are zero (CASSANDRA-7535) * Warn when SSL certificates have expired (CASSANDRA-7528) * Workaround JVM NPE on JMX bind failure (CASSANDRA-7254) * Fix race in FileCacheService RemovalListener (CASSANDRA-7278) diff --git a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java index c76a196da5..32f52eec58 100644 --- a/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java +++ b/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java @@ -45,6 +45,11 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements ILa private int UPDATE_INTERVAL_IN_MS = DatabaseDescriptor.getDynamicUpdateInterval(); private int RESET_INTERVAL_IN_MS = DatabaseDescriptor.getDynamicResetInterval(); private double BADNESS_THRESHOLD = DatabaseDescriptor.getDynamicBadnessThreshold(); + + // the score for a merged set of endpoints must be this much worse than the score for separate endpoints to + // warrant not merging two ranges into a single range + private double RANGE_MERGING_PREFERENCE = 1.5; + private String mbeanName; private boolean registered = false; @@ -320,7 +325,7 @@ public class DynamicEndpointSnitch extends AbstractEndpointSnitch implements ILa if (maxMerged < 0 || maxL1 < 0 || maxL2 < 0) return true; - return maxMerged < maxL1 + maxL2; + return maxMerged <= (maxL1 + maxL2) * RANGE_MERGING_PREFERENCE; } // Return the max score for the endpoint in the provided list, or -1.0 if no node have a score.