You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by db...@apache.org on 2013/08/20 23:40:40 UTC

git commit: add a -no-snapshot option to scrub to be able to run in tight disk space scenarios patch by ltodorov reviewed by dbrosius for cassandra-5891

Updated Branches:
  refs/heads/cassandra-1.2 1df9823a6 -> dbb55ebd6


add a -no-snapshot option to scrub to be able to run in tight disk space scenarios
patch by ltodorov reviewed by dbrosius for cassandra-5891


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/dbb55ebd
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/dbb55ebd
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/dbb55ebd

Branch: refs/heads/cassandra-1.2
Commit: dbb55ebd685ca36dc962e07d1a33b3354a1ce433
Parents: 1df9823
Author: Dave Brosius <db...@apache.org>
Authored: Tue Aug 20 17:38:52 2013 -0400
Committer: Dave Brosius <db...@apache.org>
Committed: Tue Aug 20 17:38:52 2013 -0400

----------------------------------------------------------------------
 CHANGES.txt                                                    | 1 +
 src/java/org/apache/cassandra/db/ColumnFamilyStore.java        | 6 ++++--
 src/java/org/apache/cassandra/service/StorageService.java      | 4 ++--
 src/java/org/apache/cassandra/service/StorageServiceMBean.java | 2 +-
 src/java/org/apache/cassandra/tools/NodeCmd.java               | 5 ++++-
 src/java/org/apache/cassandra/tools/NodeProbe.java             | 4 ++--
 6 files changed, 14 insertions(+), 8 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb55ebd/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 7ecf602..7d36c95 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -22,6 +22,7 @@
    (CASSANDRA-5856)
  * Don't announce schema version until we've loaded the changes locally
    (CASSANDRA-5904)
+ * Add -no-snapshot option to scrub (CASSANDRA-5891)
 Merged from 1.1:
  * Correctly validate sparse composite cells in scrub (CASSANDRA-5855)
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb55ebd/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
index 0000deb..22b1dd5 100644
--- a/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
+++ b/src/java/org/apache/cassandra/db/ColumnFamilyStore.java
@@ -967,9 +967,11 @@ public class ColumnFamilyStore implements ColumnFamilyStoreMBean
         CompactionManager.instance.performCleanup(ColumnFamilyStore.this, renewer);
     }
 
-    public void scrub() throws ExecutionException, InterruptedException
+    public void scrub(boolean disableSnapshot) throws ExecutionException, InterruptedException
     {
-        snapshotWithoutFlush("pre-scrub-" + System.currentTimeMillis());
+        // skip snapshot creation during scrub, SEE JIRA 5891
+        if(!disableSnapshot)
+            snapshotWithoutFlush("pre-scrub-" + System.currentTimeMillis());
         CompactionManager.instance.performScrub(ColumnFamilyStore.this);
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb55ebd/src/java/org/apache/cassandra/service/StorageService.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageService.java b/src/java/org/apache/cassandra/service/StorageService.java
index 588777b..9339132 100644
--- a/src/java/org/apache/cassandra/service/StorageService.java
+++ b/src/java/org/apache/cassandra/service/StorageService.java
@@ -2149,10 +2149,10 @@ public class StorageService extends NotificationBroadcasterSupport implements IE
         }
     }
 
-    public void scrub(String tableName, String... columnFamilies) throws IOException, ExecutionException, InterruptedException
+    public void scrub(boolean disableSnapshot, String tableName, String... columnFamilies) throws IOException, ExecutionException, InterruptedException
     {
         for (ColumnFamilyStore cfStore : getValidColumnFamilies(false, false, tableName, columnFamilies))
-            cfStore.scrub();
+            cfStore.scrub(disableSnapshot);
     }
 
     public void upgradeSSTables(String tableName, boolean excludeCurrentVersion, String... columnFamilies) throws IOException, ExecutionException, InterruptedException

http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb55ebd/src/java/org/apache/cassandra/service/StorageServiceMBean.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/service/StorageServiceMBean.java b/src/java/org/apache/cassandra/service/StorageServiceMBean.java
index b831d7d..15f2113 100644
--- a/src/java/org/apache/cassandra/service/StorageServiceMBean.java
+++ b/src/java/org/apache/cassandra/service/StorageServiceMBean.java
@@ -236,7 +236,7 @@ public interface StorageServiceMBean extends NotificationEmitter
      *
      * Scrubbed CFs will be snapshotted first.
      */
-    public void scrub(String tableName, String... columnFamilies) throws IOException, ExecutionException, InterruptedException;
+    public void scrub(boolean disableSnapshot, String tableName, String... columnFamilies) throws IOException, ExecutionException, InterruptedException;
 
     /**
      * Rewrite all sstables to the latest version.

http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb55ebd/src/java/org/apache/cassandra/tools/NodeCmd.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java
index f6d4310..4e9f461 100644
--- a/src/java/org/apache/cassandra/tools/NodeCmd.java
+++ b/src/java/org/apache/cassandra/tools/NodeCmd.java
@@ -70,6 +70,7 @@ public class NodeCmd
     private static final Pair<String, String> START_TOKEN_OPT = Pair.create("st", "start-token");
     private static final Pair<String, String> END_TOKEN_OPT = Pair.create("et", "end-token");
     private static final Pair<String, String> UPGRADE_ALL_SSTABLE_OPT = Pair.create("a", "include-all-sstables");
+    private static final Pair<String, String> NO_SNAPSHOT = Pair.create("ns", "no-snapshot");
 
     private static final String DEFAULT_HOST = "127.0.0.1";
     private static final int DEFAULT_PORT = 7199;
@@ -93,6 +94,7 @@ public class NodeCmd
         options.addOption(START_TOKEN_OPT, true, "token at which repair range starts");
         options.addOption(END_TOKEN_OPT, true, "token at which repair range ends");
         options.addOption(UPGRADE_ALL_SSTABLE_OPT, false, "includes sstables that are already on the most recent version during upgradesstables");
+        options.addOption(NO_SNAPSHOT, false, "disables snapshot creation for scrub");
     }
 
     public NodeCmd(NodeProbe probe)
@@ -1497,7 +1499,8 @@ public class NodeCmd
                     catch (ExecutionException ee) { err(ee, "Error occurred during cleanup"); }
                     break;
                 case SCRUB :
-                    try { probe.scrub(keyspace, columnFamilies); }
+                    boolean disableSnapshot = cmd.hasOption(NO_SNAPSHOT.left);
+                    try { probe.scrub(disableSnapshot, keyspace, columnFamilies); }
                     catch (ExecutionException ee) { err(ee, "Error occurred while scrubbing keyspace " + keyspace); }
                     break;
                 case UPGRADESSTABLES :

http://git-wip-us.apache.org/repos/asf/cassandra/blob/dbb55ebd/src/java/org/apache/cassandra/tools/NodeProbe.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java
index dbcb66e..a9b0bb5 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -187,9 +187,9 @@ public class NodeProbe
         ssProxy.forceTableCleanup(tableName, columnFamilies);
     }
 
-    public void scrub(String tableName, String... columnFamilies) throws IOException, ExecutionException, InterruptedException
+    public void scrub(boolean disableSnapshot, String tableName, String... columnFamilies) throws IOException, ExecutionException, InterruptedException
     {
-        ssProxy.scrub(tableName, columnFamilies);
+        ssProxy.scrub(disableSnapshot, tableName, columnFamilies);
     }
 
     public void upgradeSSTables(String tableName, boolean excludeCurrentVersion, String... columnFamilies) throws IOException, ExecutionException, InterruptedException