Author: brandonwilliams Date: Mon May 23 19:43:53 2011 New Revision: 1126682
URL: http://svn.apache.org/viewvc?rev=1126682&view=rev Log: Simplify FD/DES calculations. Patch by Paul Cannon, reviewed by brandonwilliams for CASSANDRA-2597 Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/gms/FailureDetector.java cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/gms/FailureDetector.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/gms/FailureDetector.java?rev=1126682&r1=1126681&r2=1126682&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/gms/FailureDetector.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/gms/FailureDetector.java Mon May 23 19:43:53 2011 @@ -200,6 +200,12 @@ class ArrivalWindow private double tLast_ = 0L; private BoundedStatsDeque arrivalIntervals_; + // this is useless except to provide backwards compatibility in phi_convict_threshold, + // because everyone seems pretty accustomed to the default of 8, and users who have + // already tuned their phi_convict_threshold for their own environments won't need to + // change. + private final double PHI_FACTOR = 1.0 / Math.log(10.0); + ArrivalWindow(int size) { arrivalIntervals_ = new BoundedStatsDeque(size); @@ -249,26 +255,16 @@ class ArrivalWindow { arrivalIntervals_.clear(); } - - double p(double t) - { - double mean = mean(); - double exponent = (-1)*(t)/mean; - return Math.pow(Math.E, exponent); - } - + + // see CASSANDRA-2597 for an explanation of the math at work here. double phi(long tnow) - { + { int size = arrivalIntervals_.size(); - double log = 0d; - if ( size > 0 ) - { - double t = tnow - tLast_; - double probability = p(t); - log = (-1) * Math.log10( probability ); - } - return log; - } + double t = tnow - tLast_; + return (size > 0) + ? PHI_FACTOR * t / mean() + : 0.0; + } public String toString() { Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java?rev=1126682&r1=1126681&r2=1126682&view=diff ============================================================================== --- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java (original) +++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/locator/DynamicEndpointSnitch.java Mon May 23 19:43:53 2011 @@ -274,7 +274,6 @@ public class DynamicEndpointSnitch exten class AdaptiveLatencyTracker extends AbstractStatsDeque { private final LinkedBlockingDeque<Double> latencies; - private static final double SENTINEL_COMPARE = 0.0001; // arbitrary; as long as it is the same across hosts it doesn't matter AdaptiveLatencyTracker(int size) { @@ -312,22 +311,9 @@ class AdaptiveLatencyTracker extends Abs return latencies.size(); } - double p(double t) - { - double mean = mean(); - double exponent = (-1) * (t) / mean; - return 1 - Math.pow( Math.E, exponent); - } - double score() { - double log = 0d; - if ( latencies.size() > 0 ) - { - double probability = p(SENTINEL_COMPARE); - log = (-1) * Math.log10( probability ); - } - return log; + return (size() > 0) ? mean() : 0.0; } }