You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by jb...@apache.org on 2010/10/07 17:40:41 UTC
svn commit: r1005497 - in /cassandra/branches/cassandra-0.6: ./
src/java/org/apache/cassandra/dht/ src/java/org/apache/cassandra/service/
src/java/org/apache/cassandra/thrift/ test/unit/org/apache/cassandra/
test/unit/org/apache/cassandra/service/
Author: jbellis
Date: Thu Oct 7 15:40:41 2010
New Revision: 1005497
URL: http://svn.apache.org/viewvc?rev=1005497&view=rev
Log:
Disallow bootstrap to an in-use token.
patch by jbellis; reviewed by gdusbabek for CASSANDRA-1561
Modified:
cassandra/branches/cassandra-0.6/CHANGES.txt
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/BootStrapper.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/thrift/CassandraDaemon.java
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/Util.java
cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java
Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Thu Oct 7 15:40:41 2010
@@ -44,6 +44,7 @@
data during server startup (CASSANDRA-1526)
* add cache save/load ability (CASSANDRA-1417)
* Ignore stray files in the commit log directory (CASSANDRA-1547)
+ * Disallow bootstrap to an in-use token (CASSANDRA-1561)
0.6.5
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/BootStrapper.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/BootStrapper.java?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/BootStrapper.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/dht/BootStrapper.java Thu Oct 7 15:40:41 2010
@@ -24,6 +24,8 @@ package org.apache.cassandra.dht;
import java.io.UnsupportedEncodingException;
import java.net.InetAddress;
+ import javax.naming.ConfigurationException;
+
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
@@ -86,12 +88,15 @@ public class BootStrapper
* if initialtoken was specified, use that.
* otherwise, pick a token to assume half the load of the most-loaded node.
*/
- public static Token getBootstrapToken(final TokenMetadata metadata, final Map<InetAddress, Double> load) throws IOException
+ public static Token getBootstrapToken(final TokenMetadata metadata, final Map<InetAddress, Double> load) throws IOException, ConfigurationException
{
if (DatabaseDescriptor.getInitialToken() != null)
{
logger.debug("token manually specified as " + DatabaseDescriptor.getInitialToken());
- return StorageService.getPartitioner().getTokenFactory().fromString(DatabaseDescriptor.getInitialToken());
+ Token token = StorageService.getPartitioner().getTokenFactory().fromString(DatabaseDescriptor.getInitialToken());
+ if (metadata.getEndPoint(token) != null)
+ throw new ConfigurationException("Bootstraping to existing token " + token + " is not allowed (decommission/removetoken the old node first).");
+ return token;
}
return getBalancedToken(metadata, load);
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageProxy.java Thu Oct 7 15:40:41 2010
@@ -613,7 +613,7 @@ public class StorageProxy implements Sto
* D, but we don't want any other results from it until after the (D, T] range. Unwrapping so that
* the ranges we consider are (D, T], (T, MIN], (MIN, D] fixes this.
*/
- private static List<AbstractBounds> getRestrictedRanges(final AbstractBounds queryRange)
+ static List<AbstractBounds> getRestrictedRanges(final AbstractBounds queryRange)
{
TokenMetadata tokenMetadata = StorageService.instance.getTokenMetadata();
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java Thu Oct 7 15:40:41 2010
@@ -28,6 +28,7 @@ import java.util.*;
import java.util.concurrent.*;
import javax.management.MBeanServer;
import javax.management.ObjectName;
+import javax.naming.ConfigurationException;
import com.google.common.collect.HashMultimap;
import com.google.common.collect.Multimap;
@@ -296,7 +297,7 @@ public class StorageService implements I
MessagingService.instance.listen(FBUtilities.getLocalAddress());
}
- public synchronized void initServer() throws IOException
+ public synchronized void initServer() throws IOException, ConfigurationException
{
if (initialized)
{
Modified: cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/thrift/CassandraDaemon.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/thrift/CassandraDaemon.java?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/thrift/CassandraDaemon.java (original)
+++ cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/thrift/CassandraDaemon.java Thu Oct 7 15:40:41 2010
@@ -27,6 +27,8 @@ import java.util.concurrent.SynchronousQ
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
+import javax.naming.ConfigurationException;
+
import org.apache.cassandra.db.SystemTable;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
@@ -115,8 +117,17 @@ public class CassandraDaemon
CompactionManager.instance.checkAllColumnFamilies();
// start server internals
- StorageService.instance.initServer();
-
+ try
+ {
+ StorageService.instance.initServer();
+ }
+ catch (ConfigurationException e)
+ {
+ logger.error("Fatal error: " + e.getMessage());
+ System.err.println("Bad configuration; unable to start server");
+ System.exit(1);
+ }
+
// now we start listening for clients
final CassandraServer cassandraServer = new CassandraServer();
Cassandra.Processor processor = new Cassandra.Processor(cassandraServer);
Modified: cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/Util.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/Util.java?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/Util.java (original)
+++ cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/Util.java Thu Oct 7 15:40:41 2010
@@ -31,9 +31,7 @@ import org.apache.commons.lang.ArrayUtil
import org.apache.cassandra.db.*;
import org.apache.cassandra.db.filter.QueryPath;
-import org.apache.cassandra.dht.Bounds;
-import org.apache.cassandra.dht.Range;
-import org.apache.cassandra.dht.Token;
+import org.apache.cassandra.dht.*;
import org.apache.cassandra.service.StorageService;
import org.apache.cassandra.thrift.SliceRange;
@@ -44,6 +42,21 @@ public class Util
return new Column(name.getBytes(), value.getBytes(), timestamp);
}
+ public static Token token(String key)
+ {
+ return StorageService.getPartitioner().getToken(key);
+ }
+
+ public static Range range(String left, String right)
+ {
+ return new Range(token(left), token(right));
+ }
+
+ public static Bounds bounds(String left, String right)
+ {
+ return new Bounds(token(left), token(right));
+ }
+
public static void addMutation(RowMutation rm, String columnFamilyName, String superColumnName, long columnName, String value, long timestamp)
{
rm.add(new QueryPath(columnFamilyName, superColumnName.getBytes(), getBytes(columnName)), value.getBytes(), timestamp);
Modified: cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java
URL: http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java?rev=1005497&r1=1005496&r2=1005497&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java (original)
+++ cassandra/branches/cassandra-0.6/test/unit/org/apache/cassandra/service/StorageServiceServerTest.java Thu Oct 7 15:40:41 2010
@@ -24,6 +24,8 @@ import java.io.IOException;
import java.util.Collections;
import java.util.List;
+import javax.naming.ConfigurationException;
+
import org.junit.Test;
import org.apache.cassandra.dht.Token;
@@ -37,7 +39,7 @@ import static org.junit.Assert.assertTru
public class StorageServiceServerTest
{
@Test
- public void testRegularMode() throws IOException, InterruptedException
+ public void testRegularMode() throws IOException, InterruptedException, ConfigurationException
{
CleanupHelper.mkdirs();
CleanupHelper.cleanup();