Author: jbellis
Date: Thu Nov 12 15:26:17 2009
New Revision: 835413
URL: http://svn.apache.org/viewvc?rev=835413&view=rev
Log:
tokenMetadata should be updated before removing obsolete pending ranges, and
unset bootstrapped flag when decommission is complete. patch by Jaakko Laine
and jbellis for CASSANDRA-435
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
incubator/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
Modified:
incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
URL:
http://svn.apache.org/viewvc/incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java?rev=835413&r1=835412&r2=835413&view=diff
==============================================================================
--- incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
(original)
+++ incubator/cassandra/trunk/src/java/org/apache/cassandra/db/SystemTable.java
Thu Nov 12 15:26:17 2009
@@ -171,7 +171,7 @@
table = Table.open(Table.SYSTEM_TABLE);
QueryFilter filter = new NamesQueryFilter(BOOTSTRAP_KEY, new
QueryPath(STATUS_CF), BOOTSTRAP);
ColumnFamily cf =
table.getColumnFamilyStore(STATUS_CF).getColumnFamily(filter);
- return cf != null;
+ return cf != null && cf.getColumn(BOOTSTRAP).value()[0] == 1;
}
catch (IOException e)
{
@@ -179,10 +179,10 @@
}
}
- public static void setBootstrapped()
+ public static void setBootstrapped(boolean isBootstrapped)
{
ColumnFamily cf = ColumnFamily.create(Table.SYSTEM_TABLE, STATUS_CF);
- cf.addColumn(new Column(BOOTSTRAP, new byte[] {1},
System.currentTimeMillis()));
+ cf.addColumn(new Column(BOOTSTRAP, new byte[] { (byte) (isBootstrapped
? 1 : 0) }, System.currentTimeMillis()));
RowMutation rm = new RowMutation(Table.SYSTEM_TABLE, BOOTSTRAP_KEY);
rm.add(cf);
try
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=835413&r1=835412&r2=835413&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
Thu Nov 12 15:26:17 2009
@@ -176,7 +176,7 @@
private void finishBootstrapping()
{
isBootstrapMode = false;
- SystemTable.setBootstrapped();
+ SystemTable.setBootstrapped(true);
setToken(getLocalToken());
Gossiper.instance().addApplicationState(StorageService.STATE_NORMAL,
new ApplicationState(partitioner_.getTokenFactory().toString(getLocalToken())));
logger_.info("Bootstrap completed! Now serving reads.");
@@ -301,7 +301,7 @@
}
else
{
- SystemTable.setBootstrapped();
+ SystemTable.setBootstrapped(true);
Token token = storageMetadata_.getToken();
setToken(token);
Gossiper.instance().addApplicationState(StorageService.STATE_NORMAL, new
ApplicationState(partitioner_.getTokenFactory().toString(token)));
@@ -395,8 +395,8 @@
Token token =
getPartitioner().getTokenFactory().fromString(state.getValue());
if (logger_.isDebugEnabled())
logger_.debug(endpoint + " state normal, token " + token);
- replicationStrategy_.removeObsoletePendingRanges();
updateForeignToken(token, endpoint);
+ replicationStrategy_.removeObsoletePendingRanges();
}
else if (STATE_LEAVING.equals(stateName))
{
@@ -1000,6 +1000,7 @@
public void finishLeaving()
{
+ SystemTable.setBootstrapped(false);
Gossiper.instance().addApplicationState(STATE_LEFT, new
ApplicationState(getLocalToken().toString()));
try
{