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 <[email protected]> Authored: Sat Nov 14 21:33:53 2015 -0800 Committer: Yuki Morishita <[email protected]> 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);
