diff --git a/conf/storage-conf.xml b/conf/storage-conf.xml
index 4c8da68d26..f78d409499 100644
--- a/conf/storage-conf.xml
+++ b/conf/storage-conf.xml
@@ -32,6 +32,18 @@
-->
org.apache.cassandra.dht.RandomPartitioner
+
+
+
diff --git a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
index 7b05160db8..4e2980c9c6 100644
--- a/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
+++ b/src/java/org/apache/cassandra/config/DatabaseDescriptor.java
@@ -119,12 +119,15 @@ public class DatabaseDescriptor
// the path qualified config file (storage-conf.xml) name
private static String configFileName_;
+ /* initial token in the ring */
+ private static String initialToken_ = null;
static
{
try
{
configFileName_ = System.getProperty("storage-config") + System.getProperty("file.separator") + "storage-conf.xml";
+ logger_.debug("Loading settings from " + configFileName_);
XMLUtils xmlUtils = new XMLUtils(configFileName_);
/* Cluster Name */
@@ -164,6 +167,8 @@ public class DatabaseDescriptor
if ( gcGrace != null )
gcGraceInSeconds_ = Integer.parseInt(gcGrace);
+ initialToken_ = xmlUtils.getNodeValue("/Storage/InitialToken");
+
/* Zookeeper's session timeout */
String zkSessionTimeout = xmlUtils.getNodeValue("/Storage/ZookeeperSessionTimeout");
if ( zkSessionTimeout != null )
@@ -536,6 +541,11 @@ public class DatabaseDescriptor
return memtableLifetime_;
}
+ public static String getInitialToken()
+ {
+ return initialToken_;
+ }
+
public static int getMemtableSize()
{
return memtableSize_;
diff --git a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
index ba07104169..ef80e7af60 100644
--- a/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/OrderPreservingPartitioner.java
@@ -24,6 +24,8 @@ import java.util.Comparator;
import java.util.Locale;
import java.util.Random;
+import org.apache.cassandra.config.DatabaseDescriptor;
+
public class OrderPreservingPartitioner implements IPartitioner
{
// TODO make locale configurable. But don't just leave it up to the OS or you could really screw
@@ -65,6 +67,11 @@ public class OrderPreservingPartitioner implements IPartitioner
public StringToken getDefaultToken()
{
+ String initialToken = DatabaseDescriptor.getInitialToken();
+ if (initialToken != null)
+ return new StringToken(initialToken);
+
+ // generate random token
String chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
Random r = new Random();
StringBuffer buffer = new StringBuffer();
diff --git a/src/java/org/apache/cassandra/dht/RandomPartitioner.java b/src/java/org/apache/cassandra/dht/RandomPartitioner.java
index f43b3d8100..80d3e9ae32 100644
--- a/src/java/org/apache/cassandra/dht/RandomPartitioner.java
+++ b/src/java/org/apache/cassandra/dht/RandomPartitioner.java
@@ -21,6 +21,7 @@ package org.apache.cassandra.dht;
import java.math.BigInteger;
import java.util.Comparator;
+import org.apache.cassandra.config.DatabaseDescriptor;
import org.apache.cassandra.utils.FBUtilities;
import org.apache.cassandra.utils.GuidGenerator;
@@ -74,6 +75,11 @@ public class RandomPartitioner implements IPartitioner
public BigIntegerToken getDefaultToken()
{
+ String initialToken = DatabaseDescriptor.getInitialToken();
+ if (initialToken != null)
+ return new BigIntegerToken(new BigInteger(initialToken));
+
+ // generate random token
String guid = GuidGenerator.guid();
BigInteger token = FBUtilities.hash(guid);
if ( token.signum() == -1 )