From 8cf9f2deda1fa2d1300813b6a0a4f3a23e00f011 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Mon, 12 Dec 2011 18:22:13 +0000 Subject: [PATCH] Allow overriding RING_DELAY. Patch by brandonwilliams reviewed by slebresne for CASSANDRA-3600 git-svn-id: https://svn.apache.org/repos/asf/cassandra/branches/cassandra-1.0@1213346 13f79535-47bb-0310-9956-ffa450edef68 --- build.xml | 3 +++ .../org/apache/cassandra/gms/Gossiper.java | 5 ++--- .../cassandra/service/StorageService.java | 20 ++++++++++++------- test/cassandra.in.sh | 3 ++- .../apache/cassandra/service/RemoveTest.java | 2 +- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/build.xml b/build.xml index 26f1194f78..c4d6b0cc21 100644 --- a/build.xml +++ b/build.xml @@ -1020,6 +1020,7 @@ url=${svn.entry.url}?pathrev=${svn.entry.commit.revision} + @@ -1028,6 +1029,7 @@ url=${svn.entry.url}?pathrev=${svn.entry.commit.revision} + @@ -1054,6 +1056,7 @@ url=${svn.entry.url}?pathrev=${svn.entry.commit.revision} + diff --git a/src/java/org/apache/cassandra/gms/Gossiper.java b/src/java/org/apache/cassandra/gms/Gossiper.java index 493b12c35a..9e88a7867b 100644 --- a/src/java/org/apache/cassandra/gms/Gossiper.java +++ b/src/java/org/apache/cassandra/gms/Gossiper.java @@ -377,9 +377,8 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean * @param endpoint - the endpoint being removed * @param token - the token being removed * @param mytoken - my own token for replication coordination - * @param delay */ - public void advertiseRemoving(InetAddress endpoint, Token token, Token mytoken, int delay) + public void advertiseRemoving(InetAddress endpoint, Token token, Token mytoken) { EndpointState epState = endpointStateMap.get(endpoint); // remember this node's generation @@ -388,7 +387,7 @@ public class Gossiper implements IFailureDetectionEventListener, GossiperMBean logger.info("Sleeping for " + StorageService.RING_DELAY + "ms to ensure " + endpoint + " does not change"); try { - Thread.sleep(delay); + Thread.sleep(StorageService.RING_DELAY); } catch (InterruptedException e) { diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java index 42ee67aef0..e7c9ca33e4 100644 --- a/src/java/org/apache/cassandra/service/StorageService.java +++ b/src/java/org/apache/cassandra/service/StorageService.java @@ -79,7 +79,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe { private static Logger logger_ = LoggerFactory.getLogger(StorageService.class); - public static final int RING_DELAY = 30 * 1000; // delay after which we assume ring has stablized + public static final int RING_DELAY = getRingDelay(); // delay after which we assume ring has stablized /* All verb handler identifiers */ public enum Verb @@ -150,6 +150,17 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe put(Verb.UNUSED_3, Stage.INTERNAL_RESPONSE); }}; + private static int getRingDelay() + { + String newdelay = System.getProperty("cassandra.ring_delay_ms"); + if (newdelay != null) + { + logger_.warn("Overriding RING_DELAY to {}ms", newdelay); + return Integer.parseInt(newdelay); + } + else + return 30 * 1000; + } /** * This pool is used for periodic short (sub-second) tasks. @@ -2328,11 +2339,6 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe * @param tokenString token for the node */ public void removeToken(String tokenString) - { - removeToken(tokenString, RING_DELAY); - } - - public void removeToken(String tokenString, int delay) { InetAddress myAddress = FBUtilities.getBroadcastAddress(); Token localToken = tokenMetadata_.getToken(myAddress); @@ -2380,7 +2386,7 @@ public class StorageService implements IEndpointStateChangeSubscriber, StorageSe calculatePendingRanges(); // the gossiper will handle spoofing this node's state to REMOVING_TOKEN for us // we add our own token so other nodes to let us know when they're done - Gossiper.instance.advertiseRemoving(endpoint, token, localToken, delay); + Gossiper.instance.advertiseRemoving(endpoint, token, localToken); // kick off streaming commands restoreReplicaCount(endpoint, myAddress); diff --git a/test/cassandra.in.sh b/test/cassandra.in.sh index 47514f28b6..682327f7d4 100644 --- a/test/cassandra.in.sh +++ b/test/cassandra.in.sh @@ -50,4 +50,5 @@ JVM_OPTS=" \ -XX:+HeapDumpOnOutOfMemoryError \ -Dcom.sun.management.jmxremote.port=8090 \ -Dcom.sun.management.jmxremote.ssl=false \ - -Dcom.sun.management.jmxremote.authenticate=false" + -Dcom.sun.management.jmxremote.authenticate=false \ + -Dcassandra.ring_delay_ms=1000" diff --git a/test/unit/org/apache/cassandra/service/RemoveTest.java b/test/unit/org/apache/cassandra/service/RemoveTest.java index 7bfa385cf9..c394e8f033 100644 --- a/test/unit/org/apache/cassandra/service/RemoveTest.java +++ b/test/unit/org/apache/cassandra/service/RemoveTest.java @@ -125,7 +125,7 @@ public class RemoveTest extends CleanupHelper { try { - ss.removeToken(token, 0); + ss.removeToken(token); } catch (Exception e) {