You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by br...@apache.org on 2011/07/20 19:52:43 UTC
svn commit: r1148866 -
/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java
Author: brandonwilliams
Date: Wed Jul 20 17:52:42 2011
New Revision: 1148866
URL: http://svn.apache.org/viewvc?rev=1148866&view=rev
Log:
Don't sample the system table keys when choosing a bootstrap token.
Patch by brandonwilliams, reviewed by jbellis for CASSANDRA-2825
Modified:
cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java
Modified: cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java?rev=1148866&r1=1148865&r2=1148866&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/branches/cassandra-0.8/src/java/org/apache/cassandra/service/StorageService.java Wed Jul 20 17:52:42 2011
@@ -1716,6 +1716,8 @@ public class StorageService implements I
List<DecoratedKey> keys = new ArrayList<DecoratedKey>();
for (ColumnFamilyStore cfs : ColumnFamilyStore.all())
{
+ if (cfs.table.name.equals(Table.SYSTEM_TABLE))
+ continue;
for (DecoratedKey key : cfs.allKeySamples())
{
if (range.contains(key.token))
@@ -1724,9 +1726,19 @@ public class StorageService implements I
}
FBUtilities.sortSampledKeys(keys, range);
- Token token = keys.size() < 3
- ? partitioner.midpoint(range.left, range.right)
- : keys.get(keys.size() / 2).token;
+ Token token;
+ if (keys.size() < 3)
+ {
+ token = partitioner.midpoint(range.left, range.right);
+ logger_.debug("Used midpoint to assign token " + token);
+ }
+ else
+ {
+ token = keys.get(keys.size() / 2).token;
+ logger_.debug("Used key sample of size " + keys.size() + " to assign token " + token);
+ }
+ if (tokenMetadata_.isMember(tokenMetadata_.getEndpoint(token)))
+ throw new RuntimeException("Chose token " + token + " which is already in use by " + tokenMetadata_.getEndpoint(token) + " -- specify one manually with initial_token");
// Hack to prevent giving nodes tokens with DELIMITER_STR in them (which is fine in a row key/token)
if (token instanceof StringToken)
{