Author: jbellis
Date: Mon Dec  6 22:32:09 2010
New Revision: 1042824

URL: http://svn.apache.org/viewvc?rev=1042824&view=rev
Log:
add support for per-CF compaction
patch by Jon Hermes; reviewed by jbellis for CASSANDRA-1812

Modified:
    cassandra/branches/cassandra-0.6/CHANGES.txt
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageServiceMBean.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
    
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java

Modified: cassandra/branches/cassandra-0.6/CHANGES.txt
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/CHANGES.txt?rev=1042824&r1=1042823&r2=1042824&view=diff
==============================================================================
--- cassandra/branches/cassandra-0.6/CHANGES.txt (original)
+++ cassandra/branches/cassandra-0.6/CHANGES.txt Mon Dec  6 22:32:09 2010
@@ -12,6 +12,7 @@
    with live subcolumn (CASSANDRA-1591)
  * clean up log messages for gossip token notifications (CASSANDRA-1518)
  * fix range queries against wrapped range (CASSANDRA-1781)
+ * add support for per-CF compaction (CASSANDRA-1812)
  * reduce fat client timeout (CASSANDRA-1730)
 
 

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/ColumnFamilyStore.java?rev=1042824&r1=1042823&r2=1042824&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
 Mon Dec  6 22:32:09 2010
@@ -701,7 +701,7 @@ public class ColumnFamilyStore implement
         return maxFile;
     }
 
-    void forceCleanup()
+    public void forceCleanup()
     {
         CompactionManager.instance.submitCleanup(ColumnFamilyStore.this);
     }

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java?rev=1042824&r1=1042823&r2=1042824&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageService.java
 Mon Dec  6 22:32:09 2010
@@ -554,7 +554,7 @@ public class StorageService implements I
      * Handle node move to normal state. That is, node is entering token ring 
and participating
      * in reads.
      *
-     * @param endPoint node
+     * @param endpoint node
      * @param pieces STATE_NORMAL,token[,other_state,token]
      */
     private void handleStateNormal(InetAddress endpoint, String[] pieces)
@@ -1034,11 +1034,12 @@ public class StorageService implements I
             table.forceCleanup();
         }
     }
-
-    public void forceTableCleanup(String tableName) throws IOException
+    public void forceTableCleanup(String tableName, String... columnFamilies) 
throws IOException
     {
-        Table table = getValidTable(tableName);
-        table.forceCleanup();
+        for (ColumnFamilyStore cfStore : getValidColumnFamilies(tableName, 
columnFamilies))
+        {
+            cfStore.forceCleanup();
+        }
     }
     
     public void forceTableCompaction() throws IOException
@@ -1046,11 +1047,12 @@ public class StorageService implements I
         for (Table table : Table.all())
             table.forceCompaction();
     }
-
-    public void forceTableCompaction(String tableName) throws IOException
+    public void forceTableCompaction(String ks, String... columnFamilies) 
throws IOException
     {
-        Table table = getValidTable(tableName);
-        table.forceCompaction();
+        for (ColumnFamilyStore cfStore : getValidColumnFamilies(ks, 
columnFamilies))
+        {
+            cfStore.forceMajorCompaction();
+        }
     }
 
     /**

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageServiceMBean.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageServiceMBean.java?rev=1042824&r1=1042823&r2=1042824&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageServiceMBean.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/service/StorageServiceMBean.java
 Mon Dec  6 22:32:09 2010
@@ -96,9 +96,9 @@ public interface StorageServiceMBean
     public void forceTableCompaction() throws IOException;
 
     /**
-     * Forces major compaction of a single keyspace
+     * Forces major compaction on a single cf of a single keyspace
      */
-    public void forceTableCompaction(String tableName) throws IOException;
+    public void forceTableCompaction(String ks, String... columnFamilies) 
throws IOException;
 
     /**
      * Trigger a cleanup of keys on all tables.
@@ -108,7 +108,7 @@ public interface StorageServiceMBean
     /**
      * Trigger a cleanup of keys on a single keyspace
      */
-    public void forceTableCleanup(String tableName) throws IOException;
+    public void forceTableCleanup(String tableName, String... columnFamilies) 
throws IOException;
 
     /**
      * Takes the snapshot for a given table.

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java?rev=1042824&r1=1042823&r2=1042824&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeCmd.java
 Mon Dec  6 22:32:09 2010
@@ -69,19 +69,33 @@ public class NodeCmd {
     private static void printUsage()
     {
         HelpFormatter hf = new HelpFormatter();
-        String header = String.format(
-                "%nAvailable commands: ring, info, cleanup, compact, cfstats, 
snapshot [snapshotname], clearsnapshot, " +
-                "tpstats, flush, drain, repair, decommission, move, 
loadbalance, removetoken, " +
-                "setcachecapacity <keyspace> <cfname> <keycachecapacity> 
<rowcachecapacity>, " +
-                "getcompactionthreshold, setcompactionthreshold [minthreshold] 
([maxthreshold])" +
-                "streams [host], cfhistograms <keyspace> <column_family>");
+        String header = String.format("%nAvailable commands:%n"
+                                      + "ring%n"
+                                      + "info%n"
+                                      + "cfstats%n"
+                                      + "snapshot [snapshotname]%n"
+                                      + "info%n"
+                                      + "cfstats%n"
+                                      + "tpstats%n"
+                                      + "flush%n"
+                                      + "drain%n"
+                                      + "decommission%n"
+                                      + "move <new token>%n"
+                                      + "loadbalance%n"
+                                      + "removetoken <token>%n"
+                                      + "repair|cleanup|compact [keyspace] 
[columfamilies]%n"
+                                      + "setcachecapacity <keyspace> <cfname> 
<keycachecapacity> <rowcachecapacity>%n"
+                                      + "getcompactionthreshold%n"
+                                      + "setcompactionthreshold [minthreshold] 
([maxthreshold])%n"
+                                      + "streams [host]%n"
+                                      + "cfhistograms <keyspace> 
<column_family>%n");
         String usage = String.format("java %s --host <arg> <command>%n", 
NodeCmd.class.getName());
         hf.printHelp(usage, "", options, header);
     }
-    
+
     /**
      * Write a textual representation of the Cassandra ring.
-     * 
+     *
      * @param outs the stream to write to
      */
     public void printRing(PrintStream outs)
@@ -148,11 +162,11 @@ public class NodeCmd {
                     asciiRingArt = "|   |";
             }
             outs.println(asciiRingArt);
-            
+
             counter++;
         }
     }
-    
+
     public void printThreadPoolStats(PrintStream outs)
     {
         outs.print(String.format("%-25s", "Pool Name"));
@@ -160,9 +174,9 @@ public class NodeCmd {
         outs.print(String.format("%10s", "Pending"));
         outs.print(String.format("%15s", "Completed"));
         outs.println();
-        
+
         Iterator<Map.Entry<String, IExecutorMBean>> threads = 
probe.getThreadPoolMBeanProxies();
-        
+
         for (; threads.hasNext();)
         {
             Map.Entry<String, IExecutorMBean> thread = threads.next();
@@ -178,7 +192,7 @@ public class NodeCmd {
 
     /**
      * Write node information.
-     * 
+     *
      * @param outs the stream to write to
      */
     public void printInfo(PrintStream outs)
@@ -186,7 +200,7 @@ public class NodeCmd {
         outs.println(probe.getToken());
         outs.println(String.format("%-17s: %s", "Load", 
probe.getLoadString()));
         outs.println(String.format("%-17s: %s", "Generation No", 
probe.getCurrentGenerationNumber()));
-        
+
         // Uptime
         long secondsUp = probe.getUptime() / 1000;
         outs.println(String.format("%-17s: %d", "Uptime (seconds)", 
secondsUp));
@@ -251,7 +265,7 @@ public class NodeCmd {
             }
         }
     }
-    
+
     public void printColumnFamilyStats(PrintStream outs)
     {
         Map <String, List <ColumnFamilyStoreMBean>> cfstoreMap = new HashMap 
<String, List <ColumnFamilyStoreMBean>>();
@@ -454,12 +468,32 @@ public class NodeCmd {
             else
                 probe.forceTableCleanup();
         }
-        else if (cmdName.equals("compact"))
+        else if (cmdName.equals("compact") || cmdName.equals("cleanup"))
         {
-            if (arguments.length > 1)
-                probe.forceTableCompaction(arguments[1]);
+            if (arguments.length == 1)
+            {
+                if (cmdName.equals("compact"))
+                    probe.forceTableCompaction();
+                else
+                    probe.forceTableCleanup();
+            }
             else
-                probe.forceTableCompaction();
+            {
+                String[] columnFamilies = new String[cmd.getArgs().length - 2];
+                for (int i = 0; i < columnFamilies.length; i++)
+                {
+                    columnFamilies[i] = cmd.getArgs()[i + 2];
+                }
+
+                if (cmdName.equals("compact"))
+                {
+                    probe.forceTableCompaction(arguments[1],columnFamilies);
+                }
+                else
+                {
+                    probe.forceTableCleanup(arguments[1],columnFamilies);
+                }
+            }
         }
         else if (cmdName.equals("cfstats"))
         {

Modified: 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
URL: 
http://svn.apache.org/viewvc/cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java?rev=1042824&r1=1042823&r2=1042824&view=diff
==============================================================================
--- 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
 (original)
+++ 
cassandra/branches/cassandra-0.6/src/java/org/apache/cassandra/tools/NodeProbe.java
 Mon Dec  6 22:32:09 2010
@@ -132,20 +132,18 @@ public class NodeProbe
     {
         ssProxy.forceTableCleanup();
     }
-
-    public void forceTableCleanup(String tableName) throws IOException
+    public void forceTableCleanup(String ks, String... columnFamilies) throws 
IOException
     {
-        ssProxy.forceTableCleanup(tableName);
+        ssProxy.forceTableCleanup(ks, columnFamilies);
     }
 
     public void forceTableCompaction() throws IOException
     {
         ssProxy.forceTableCompaction();
     }
-
-    public void forceTableCompaction(String tableName) throws IOException
+    public void forceTableCompaction(String ks, String... columnFamilies) 
throws IOException
     {
-        ssProxy.forceTableCompaction(tableName);
+        ssProxy.forceTableCompaction(ks, columnFamilies);
     }
 
     public void forceTableFlush(String tableName, String... columnFamilies) 
throws IOException


Reply via email to