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/07 16:52:55 UTC

svn commit: r1005473 - in /cassandra/trunk: CHANGES.txt src/java/org/apache/cassandra/service/StorageService.java src/java/org/apache/cassandra/service/StorageServiceMBean.java

Author: jbellis
Date: Thu Oct  7 14:52:54 2010
New Revision: 1005473

URL: http://svn.apache.org/viewvc?rev=1005473&view=rev
Log:
add StorageService.getDrainProgress.
patch by Nick Bailey and jbellis for CASSANDRA-1588

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

Modified: cassandra/trunk/CHANGES.txt
URL: http://svn.apache.org/viewvc/cassandra/trunk/CHANGES.txt?rev=1005473&r1=1005472&r2=1005473&view=diff
==============================================================================
--- cassandra/trunk/CHANGES.txt (original)
+++ cassandra/trunk/CHANGES.txt Thu Oct  7 14:52:54 2010
@@ -18,6 +18,7 @@ dev
  * allow keyspace creation with RF > N (CASSANDRA-1428)
  * improve cli error handling (CASSANDRA-1580)
  * add cache save/load ability (CASSANDRA-1417)
+ * add StorageService.getDrainProgress (CASSANDRA-1588)
 
 
 0.7-beta2

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=1005473&r1=1005472&r2=1005473&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageService.java Thu Oct  7 14:52:54 2010
@@ -181,6 +181,9 @@ public class StorageService implements I
     private String operationMode;
     private MigrationManager migrationManager = new MigrationManager();
 
+    /* Used for tracking drain progress */
+    private volatile int totalCFs, remainingCFs;
+
     public void finishBootstrapping()
     {
         isBootstrapMode = false;
@@ -1840,7 +1843,12 @@ public class StorageService implements I
     {
         return operationMode;
     }
-    
+
+    public String getDrainProgress()
+    {
+        return String.format("Drained %s/%s ColumnFamilies", remainingCFs, totalCFs);
+    }
+
     /** shuts node off to writes, empties memtables and the commit log. */
     public synchronized void drain() throws IOException, InterruptedException, ExecutionException
     {
@@ -1856,20 +1864,29 @@ public class StorageService implements I
         MessagingService.shutdown();
         setMode("Draining: emptying MessageService pools", false);
         MessagingService.waitFor();
-       
+
         setMode("Draining: clearing mutation stage", false);
         mutationStage.shutdown();
         mutationStage.awaitTermination(3600, TimeUnit.SECONDS);
 
         // lets flush.
         setMode("Draining: flushing column families", false);
+        List<ColumnFamilyStore> cfses = new ArrayList<ColumnFamilyStore>();
         for (String tableName : DatabaseDescriptor.getNonSystemTables())
-            for (Future f : Table.open(tableName).flush())
-                f.get();
+        {
+            Table table = Table.open(tableName);
+            cfses.addAll(table.getColumnFamilyStores());
+        }
+        totalCFs = remainingCFs = cfses.size();
+        for (ColumnFamilyStore cfs : cfses)
+        {
+            cfs.forceBlockingFlush();
+            remainingCFs--;
+        }
 
         ColumnFamilyStore.postFlushExecutor.shutdown();
         ColumnFamilyStore.postFlushExecutor.awaitTermination(60, TimeUnit.SECONDS);
-       
+
         // want to make sure that any segments deleted as a result of flushing are gone.
         DeletionService.waitFor();
 

Modified: cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: http://svn.apache.org/viewvc/cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=1005473&r1=1005472&r2=1005473&view=diff
==============================================================================
--- cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java (original)
+++ cassandra/trunk/src/java/org/apache/cassandra/service/StorageServiceMBean.java Thu Oct  7 14:52:54 2010
@@ -225,6 +225,9 @@ public interface StorageServiceMBean
     /** get the operational mode (leaving, joining, normal, decommissioned, client) **/
     public String getOperationMode();
 
+    /** get the progress of a drain operation */
+    public String getDrainProgress();
+
     /** makes node unavailable for writes, flushes memtables and replays commitlog. */
     public void drain() throws IOException, InterruptedException, ExecutionException;