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/02/10 03:14:48 UTC
svn commit: r908319 - in /incubator/cassandra/trunk: ./
src/java/org/apache/cassandra/service/ src/java/org/apache/cassandra/tools/
Author: jbellis
Date: Wed Feb 10 02:14:47 2010
New Revision: 908319
URL: http://svn.apache.org/viewvc?rev=908319&view=rev
Log:
merge from 0.5
Modified:
incubator/cassandra/trunk/ (props changed)
incubator/cassandra/trunk/CHANGES.txt
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
Propchange: incubator/cassandra/trunk/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Feb 10 02:14:47 2010
@@ -1,4 +1,4 @@
/incubator/cassandra/branches/cassandra-0.3:774578-796573
/incubator/cassandra/branches/cassandra-0.4:810145-834239,834349-834350
-/incubator/cassandra/branches/cassandra-0.5:888872-904679
+/incubator/cassandra/branches/cassandra-0.5:888872-908312
/incubator/cassandra/trunk:749219-888871
Modified: incubator/cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/CHANGES.txt?rev=908319&r1=908318&r2=908319&view=diff
==============================================================================
--- incubator/cassandra/trunk/CHANGES.txt (original)
+++ incubator/cassandra/trunk/CHANGES.txt Wed Feb 10 02:14:47 2010
@@ -28,6 +28,7 @@
0.5.1
* ensure all files for an sstable are streamed to the same directory.
(CASSANDRA-716)
+ * more accurate load estimate for bootstrapping (CASSANDRA-762)
0.5.0 final
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java?rev=908319&r1=908318&r2=908319&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageLoadBalancer.java Wed Feb 10 02:14:47 2010
@@ -163,7 +163,7 @@
}
}
- private static final long BROADCAST_INTERVAL = 5 * 60 * 1000L;
+ private static final int BROADCAST_INTERVAL = 60 * 1000;
public static final StorageLoadBalancer instance = new StorageLoadBalancer();
@@ -353,18 +353,17 @@
loadTimer_.schedule(new LoadDisseminator(), 2 * Gossiper.intervalInMillis_, BROADCAST_INTERVAL);
}
- /** wait for node information to be available. if the rest of the cluster just came up,
- this could be up to threshold_ ms (currently 5 minutes). */
+ /**
+ * Wait for at least BROADCAST_INTERVAL ms, to give all nodes enough time to
+ * report in.
+ */
public void waitForLoadInfo()
{
+ int duration = BROADCAST_INTERVAL + StorageService.RING_DELAY;
try
{
- while (loadInfo_.isEmpty())
- {
- Thread.sleep(100);
- }
- // one more sleep in case there are some stragglers
- Thread.sleep(StorageService.RING_DELAY);
+ logger_.info("Sleeping " + duration + " ms to wait for load information...");
+ Thread.sleep(duration);
}
catch (InterruptedException e)
{
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=908319&r1=908318&r2=908319&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Wed Feb 10 02:14:47 2010
@@ -67,7 +67,7 @@
{
private static Logger logger_ = Logger.getLogger(StorageService.class);
- public static final long RING_DELAY = 30 * 1000; // delay after which we assume ring has stablized
+ public static final int RING_DELAY = 30 * 1000; // delay after which we assume ring has stablized
public final static String MOVE_STATE = "MOVE";
@@ -313,7 +313,7 @@
if (DatabaseDescriptor.isAutoBootstrap()
&& !(DatabaseDescriptor.getSeeds().contains(FBUtilities.getLocalAddress()) || SystemTable.isBootstrapped()))
{
- logger_.info("Starting in bootstrap mode (first, sleeping to get load information)");
+ logger_.info("Starting in bootstrap mode");
StorageLoadBalancer.instance.waitForLoadInfo();
logger_.info("... got load info");
if (tokenMetadata_.isMember(FBUtilities.getLocalAddress()))
@@ -1271,6 +1271,7 @@
throw new UnsupportedOperationException("data is currently moving to this node; unable to leave the ring");
}
+ // leave the ring
logger_.info("DECOMMISSIONING");
startLeaving();
logger_.info("decommission sleeping " + RING_DELAY);
@@ -1362,7 +1363,7 @@
onFinish.run();
}
- public void move(String newToken) throws InterruptedException
+ public void move(String newToken) throws IOException, InterruptedException
{
move(partitioner_.getTokenFactory().fromString(newToken));
}
@@ -1377,14 +1378,17 @@
*
* @param token new token to boot to, or if null, find balanced token to boot to
*/
- private void move(final Token token) throws InterruptedException
+ private void move(final Token token) throws IOException, InterruptedException
{
for (String table : DatabaseDescriptor.getTables())
{
if (tokenMetadata_.getPendingRanges(table, FBUtilities.getLocalAddress()).size() > 0)
throw new UnsupportedOperationException("data is currently moving to this node; unable to leave the ring");
}
+ if (token != null && tokenMetadata_.sortedTokens().contains(token))
+ throw new IOException("target token " + token + " is already owned by another node");
+ // leave the ring
logger_.info("starting move. leaving token " + getLocalToken());
startLeaving();
logger_.info("move sleeping " + RING_DELAY);
@@ -1395,8 +1399,11 @@
public void runMayThrow() throws IOException
{
Token bootstrapToken = token;
- if (bootstrapToken == null)
- bootstrapToken = BootStrapper.getBalancedToken(tokenMetadata_, StorageLoadBalancer.instance.getLoadInfo());
+ if (bootstrapToken == null)
+ {
+ StorageLoadBalancer.instance.waitForLoadInfo();
+ bootstrapToken = BootStrapper.getBalancedToken(tokenMetadata_, StorageLoadBalancer.instance.getLoadInfo());
+ }
logger_.info("re-bootstrapping to new token " + bootstrapToken);
startBootstrap(bootstrapToken);
}
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=908319&r1=908318&r2=908319&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Wed Feb 10 02:14:47 2010
@@ -141,7 +141,7 @@
* @param newToken token to move this node to.
* This node will unload its data onto its neighbors, and bootstrap to the new token.
*/
- public void move(String newToken) throws InterruptedException;
+ public void move(String newToken) throws IOException, InterruptedException;
/**
* This node will unload its data onto its neighbors, and bootstrap to share the range
Modified: incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=908319&r1=908318&r2=908319&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java (original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/tools/NodeProbe.java Wed Feb 10 02:14:47 2010
@@ -325,7 +325,7 @@
ssProxy.loadBalance();
}
- public void move(String newToken) throws InterruptedException
+ public void move(String newToken) throws IOException, InterruptedException
{
ssProxy.move(newToken);
}