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
         {


Reply via email to