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/12 17:51:46 UTC

svn commit: r1021807 - /cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java

Author: jbellis
Date: Tue Oct 12 15:51:46 2010
New Revision: 1021807

URL: http://svn.apache.org/viewvc?rev=1021807&view=rev
Log:
clean up, mostly removal of unnecessary Latch.  patch by jbellis

Modified:
    cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java

Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java?rev=1021807&r1=1021806&r2=1021807&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Tue Oct 12 15:51:46 2010
@@ -171,7 +171,6 @@ public class StorageService implements I
 
     private Set<InetAddress> replicatingNodes;
     private InetAddress removingNode;
-    private CountDownLatch replicateLatch;
 
     /* Are we starting this node in bootstrap mode? */
     private boolean isBootstrapMode;
@@ -754,7 +753,7 @@ public class StorageService implements I
      * Handle node being actively removed from the ring.
      *
      * @param endpoint node
-     * @param moveValue (token to notify of removal)<Delimiter>(token to remove)
+     * @param pieces (token to notify of removal)(token to remove)(unused)(unused)
      */
     private void handleStateRemoving(InetAddress endpoint, String[] pieces)
     {
@@ -1707,10 +1706,7 @@ public class StorageService implements I
      */
     public void finishRemoval()
     {
-        while (replicateLatch != null && replicateLatch.getCount() > 0)
-        {
-            replicateLatch.countDown();
-        }
+        replicatingNodes.clear();
     }
 
     /**
@@ -1738,7 +1734,7 @@ public class StorageService implements I
         if (tokenMetadata_.isLeaving(endpoint)) 
             throw new UnsupportedOperationException("Node " + endpoint + " is already being removed.");
 
-        if (this.replicatingNodes != null || replicateLatch != null)
+        if (replicatingNodes != null)
             throw new UnsupportedOperationException("This node is already processing a removal. Wait for it to complete.");
 
         // Find the endpoints that are going to become responsible for data
@@ -1757,7 +1753,6 @@ public class StorageService implements I
                     logger_.warn("Endpoint " + ep + " is down and will not receive data for re-replication of " + endpoint);
             }
         }
-        replicateLatch = new CountDownLatch(this.replicatingNodes.size());
         removingNode = endpoint;
 
         tokenMetadata_.addLeavingEndpoint(endpoint);
@@ -1766,15 +1761,20 @@ public class StorageService implements I
         // but indicate the leaving token so that it can be dealt with.
         Gossiper.instance.addLocalApplicationState(ApplicationState.STATUS, valueFactory.removingNonlocal(localToken, token));
 
+        // kick off streaming commands
         restoreReplicaCount(endpoint, myAddress);
 
-        try
+        // wait for ReplicationFinishedVerbHandler to signal we're done
+        while (!replicatingNodes.isEmpty())
         {
-            replicateLatch.await();
-        }
-        catch (InterruptedException e)
-        {
-            logger_.error("Interrupted while waiting for replication confirmation.");
+            try
+            {
+                Thread.sleep(100);
+            }
+            catch (InterruptedException e)
+            {
+                throw new AssertionError(e);
+            }
         }
 
         Gossiper.instance.removeEndpoint(endpoint);
@@ -1789,15 +1789,14 @@ public class StorageService implements I
         if(!this.replicatingNodes.isEmpty())
             logger_.error("Failed to recieve removal confirmation for " + StringUtils.join(this.replicatingNodes, ","));
 
-        this.replicatingNodes = null;
+        replicatingNodes = null;
         removingNode = null;
-        replicateLatch = null;
     }
 
     public void confirmReplication(InetAddress node)
     {
-        if(replicatingNodes != null && replicatingNodes.remove(node))
-            replicateLatch.countDown();
+        assert replicatingNodes != null;
+        replicatingNodes.remove(node);
     }
 
     public boolean isClientMode()
@@ -1921,7 +1920,7 @@ public class StorageService implements I
                 return migration;
             }
         };
-        Migration migration = null;
+        Migration migration;
         try
         {
             migration = StageManager.getStage(Stage.MIGRATION).submit(call).get();
@@ -2033,14 +2032,6 @@ public class StorageService implements I
     }
     
     // Never ever do this at home. Used by tests.
-    Map<String, AbstractReplicationStrategy> setReplicationStrategyUnsafe(Map<String, AbstractReplicationStrategy> replacement)
-    {
-        Map<String, AbstractReplicationStrategy> old = replicationStrategies;
-        replicationStrategies = replacement;
-        return old;
-    }
-
-    // Never ever do this at home. Used by tests.
     IPartitioner setPartitionerUnsafe(IPartitioner newPartitioner)
     {
         IPartitioner oldPartitioner = partitioner_;