diff --git a/CHANGES.txt b/CHANGES.txt
index ac21376169..5fa5002968 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -24,6 +24,7 @@
(CASSANDRA-1100)
* windows scripts for SSTableImport/Export (CASSANDRA-1051)
* windows script for nodetool (CASSANDRA-1113)
+ * expose PhiConvictThreshold (CASSANDRA-1053)
0.6.1
diff --git a/conf/storage-conf.xml b/conf/storage-conf.xml
index e1850385b0..02a0b4705d 100644
--- a/conf/storage-conf.xml
+++ b/conf/storage-conf.xml
@@ -215,6 +215,9 @@
10000
+
+
128
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index ac87099102..38b1bdd206 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -74,6 +74,7 @@ public class DatabaseDescriptor
private static InetAddress thriftAddress;
private static String clusterName = "Test";
private static long rpcTimeoutInMillis = 2000;
+ private static int phiConvictThreshold = 8;
private static Set seeds = new HashSet();
/* Keeps the list of data file directories */
private static String[] dataFileDirectories;
@@ -288,6 +289,16 @@ public class DatabaseDescriptor
if ( rpcTimeout != null )
rpcTimeoutInMillis = Integer.parseInt(rpcTimeout);
+ /* phi convict threshold for FailureDetector */
+ String phiThreshold = xmlUtils.getNodeValue("/Storage/PhiConvictThreshold");
+ if ( phiThreshold != null )
+ phiConvictThreshold = Integer.parseInt(phiThreshold);
+
+ if (phiConvictThreshold < 5 || phiConvictThreshold > 16)
+ {
+ throw new ConfigurationException("PhiConvictThreshold must be between 5 and 16");
+ }
+
/* Thread per pool */
String rawReaders = xmlUtils.getNodeValue("/Storage/ConcurrentReads");
if (rawReaders != null)
@@ -1002,6 +1013,11 @@ public class DatabaseDescriptor
return rpcTimeoutInMillis;
}
+ public static int getPhiConvictThreshold()
+ {
+ return phiConvictThreshold;
+ }
+
public static int getConsistencyThreads()
{
return consistencyThreads;
diff --git a/src/java/org/apache/cassandra/gms/FailureDetector.java b/src/java/org/apache/cassandra/gms/FailureDetector.java
index 2804afdc1a..11e5cd96f5 100644
--- a/src/java/org/apache/cassandra/gms/FailureDetector.java
+++ b/src/java/org/apache/cassandra/gms/FailureDetector.java
@@ -33,6 +33,7 @@ import org.apache.commons.lang.StringUtils;
import java.net.InetAddress;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.BoundedStatsDeque;
+import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.log4j.Logger;
/**
@@ -45,7 +46,7 @@ public class FailureDetector implements IFailureDetector, FailureDetectorMBean
public static final IFailureDetector instance = new FailureDetector();
private static Logger logger_ = Logger.getLogger(FailureDetector.class);
private static final int sampleSize_ = 1000;
- private static final int phiConvictThreshold_ = 8;
+ private static int phiConvictThreshold_;
/* The Failure Detector has to have been up for at least 1 min. */
private static final long uptimeThreshold_ = 60000;
/* The time when the module was instantiated. */
@@ -56,6 +57,7 @@ public class FailureDetector implements IFailureDetector, FailureDetectorMBean
public FailureDetector()
{
+ phiConvictThreshold_ = DatabaseDescriptor.getPhiConvictThreshold();
creationTime_ = System.currentTimeMillis();
// Register this instance with JMX
try
@@ -110,6 +112,16 @@ public class FailureDetector implements IFailureDetector, FailureDetectorMBean
throw new IOError(e);
}
}
+
+ public void setPhiConvictThreshold(int phi)
+ {
+ phiConvictThreshold_ = phi;
+ }
+
+ public int getPhiConvictThreshold()
+ {
+ return phiConvictThreshold_;
+ }
public boolean isAlive(InetAddress ep)
{
diff --git a/src/java/org/apache/cassandra/gms/FailureDetectorMBean.java b/src/java/org/apache/cassandra/gms/FailureDetectorMBean.java
index 3c9f7e5a6a..d7411fc955 100644
--- a/src/java/org/apache/cassandra/gms/FailureDetectorMBean.java
+++ b/src/java/org/apache/cassandra/gms/FailureDetectorMBean.java
@@ -21,4 +21,8 @@ package org.apache.cassandra.gms;
public interface FailureDetectorMBean
{
public void dumpInterArrivalTimes();
+
+ public void setPhiConvictThreshold(int phi);
+
+ public int getPhiConvictThreshold();
}