You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by yu...@apache.org on 2016/01/13 00:19:33 UTC
cassandra git commit: Support user-defined compactions through
nodetool
Repository: cassandra
Updated Branches:
refs/heads/trunk a883ff5f3 -> 836a30b17
Support user-defined compactions through nodetool
patch by jeffj; reviewed by yukim for CASSANDRA-10660
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/836a30b1
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/836a30b1
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/836a30b1
Branch: refs/heads/trunk
Commit: 836a30b17d5ab7d9b0c1f22be27c6469cbdf583b
Parents: a883ff5
Author: Jeff Jirsa <je...@jeffjirsa.net>
Authored: Sat Nov 14 21:33:53 2015 -0800
Committer: Yuki Morishita <yu...@apache.org>
Committed: Tue Jan 12 17:11:33 2016 -0600
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../org/apache/cassandra/tools/NodeProbe.java | 4 ++++
.../cassandra/tools/nodetool/Compact.java | 23 ++++++++++++++++++--
3 files changed, 26 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/836a30b1/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 36f0a8a..6bfd7ad 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.4
+ * Support user-defined compaction through nodetool (CASSANDRA-10660)
* Stripe view locks by key and table ID to reduce contention (CASSANDRA-10981)
* Add nodetool gettimeout and settimeout commands (CASSANDRA-10953)
* Add 3.0 metadata to sstablemetadata output (CASSANDRA-10838)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/836a30b1/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 891ed83..a8d23ca 100644
--- a/src/java/org/apache/cassandra/tools/NodeProbe.java
+++ b/src/java/org/apache/cassandra/tools/NodeProbe.java
@@ -294,6 +294,10 @@ public class NodeProbe implements AutoCloseable
}
}
+ public void forceUserDefinedCompaction(String datafiles) throws IOException, ExecutionException, InterruptedException
+ {
+ compactionProxy.forceUserDefinedCompaction(datafiles);
+ }
public void forceKeyspaceCompaction(boolean splitOutput, String keyspaceName, String... tableNames) throws IOException, ExecutionException, InterruptedException
{
http://git-wip-us.apache.org/repos/asf/cassandra/blob/836a30b1/src/java/org/apache/cassandra/tools/nodetool/Compact.java
----------------------------------------------------------------------
diff --git a/src/java/org/apache/cassandra/tools/nodetool/Compact.java b/src/java/org/apache/cassandra/tools/nodetool/Compact.java
index 002541d..f268f0a 100644
--- a/src/java/org/apache/cassandra/tools/nodetool/Compact.java
+++ b/src/java/org/apache/cassandra/tools/nodetool/Compact.java
@@ -27,18 +27,37 @@ import java.util.List;
import org.apache.cassandra.tools.NodeProbe;
import org.apache.cassandra.tools.NodeTool.NodeToolCmd;
-@Command(name = "compact", description = "Force a (major) compaction on one or more tables")
+@Command(name = "compact", description = "Force a (major) compaction on one or more tables or user-defined compaction on given SSTables")
public class Compact extends NodeToolCmd
{
- @Arguments(usage = "[<keyspace> <tables>...]", description = "The keyspace followed by one or many tables")
+ @Arguments(usage = "[<keyspace> <tables>...] or <SSTable file>...", description = "The keyspace followed by one or many tables or list of SSTable data files when using --user-defined")
private List<String> args = new ArrayList<>();
@Option(title = "split_output", name = {"-s", "--split-output"}, description = "Use -s to not create a single big file")
private boolean splitOutput = false;
+ @Option(title = "user-defined", name = {"--user-defined"}, description = "Use --user-defined to submit listed files for user-defined compaction")
+ private boolean userDefined = false;
+
@Override
public void execute(NodeProbe probe)
{
+ if (splitOutput && userDefined)
+ {
+ throw new RuntimeException("Invalid option combination: User defined compaction can not be split");
+ }
+ else if (userDefined)
+ {
+ try
+ {
+ String userDefinedFiles = String.join(",", args);
+ probe.forceUserDefinedCompaction(userDefinedFiles);
+ } catch (Exception e) {
+ throw new RuntimeException("Error occurred during user defined compaction", e);
+ }
+ return;
+ }
+
List<String> keyspaces = parseOptionalKeyspace(args, probe);
String[] tableNames = parseOptionalTables(args);