From 8e360f80f4454c1c40edfefdf44b92bfbb9be6f1 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Tue, 11 Mar 2014 13:00:28 -0500 Subject: [PATCH] Allow cassandra-stress to set compaction strategy options patch by Benedict Elliott Smith; reviewed by Russell Spitzer for CASSANDRA-6451 --- CHANGES.txt | 1 + .../stress/settings/OptionCompaction.java | 62 ++++++++++ .../stress/settings/OptionMulti.java | 62 +++++++++- .../stress/settings/OptionReplication.java | 112 ++++++------------ .../stress/settings/OptionSimple.java | 59 ++++++--- .../stress/settings/SettingsCommandMixed.java | 2 +- .../stress/settings/SettingsSchema.java | 32 ++--- 7 files changed, 213 insertions(+), 117 deletions(-) create mode 100644 tools/stress/src/org/apache/cassandra/stress/settings/OptionCompaction.java diff --git a/CHANGES.txt b/CHANGES.txt index 607e2dc63f..06331adeb8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 2.1.0-beta2 + * Allow cassandra-stress to set compaction strategy options (CASSANDRA-6451) * Add broadcast_rpc_address option to cassandra.yaml (CASSANDRA-5899) * Auto reload GossipingPropertyFileSnitch config (CASSANDRA-5897) * Fix overflow of memtable_total_space_in_mb (CASSANDRA-6573) diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/OptionCompaction.java b/tools/stress/src/org/apache/cassandra/stress/settings/OptionCompaction.java new file mode 100644 index 0000000000..da74e430e8 --- /dev/null +++ b/tools/stress/src/org/apache/cassandra/stress/settings/OptionCompaction.java @@ -0,0 +1,62 @@ +package org.apache.cassandra.stress.settings; + +import java.util.Arrays; +import java.util.List; +import java.util.Map; + +import com.google.common.base.Function; + +import org.apache.cassandra.config.CFMetaData; +import org.apache.cassandra.exceptions.ConfigurationException; + +/** + * For specifying replication options + */ +class OptionCompaction extends OptionMulti +{ + + private final OptionSimple strategy = new OptionSimple("strategy=", new StrategyAdapter(), null, "The compaction strategy to use", false); + + public OptionCompaction() + { + super("compaction", "Define the compaction strategy and any parameters", true); + } + + public String getStrategy() + { + return strategy.value(); + } + + public Map getOptions() + { + return extraOptions(); + } + + protected List options() + { + return Arrays.asList(strategy); + } + + @Override + public boolean happy() + { + return true; + } + + private static final class StrategyAdapter implements Function + { + + public String apply(String name) + { + try + { + CFMetaData.createCompactionStrategy(name); + } catch (ConfigurationException e) + { + throw new IllegalArgumentException("Invalid compaction strategy: " + name); + } + return name; + } + } + +} diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/OptionMulti.java b/tools/stress/src/org/apache/cassandra/stress/settings/OptionMulti.java index 1901587276..7074dc6a69 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/OptionMulti.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/OptionMulti.java @@ -22,7 +22,11 @@ package org.apache.cassandra.stress.settings; import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -39,21 +43,34 @@ abstract class OptionMulti extends Option @Override public List options() { - return OptionMulti.this.options(); + if (collectAsMap == null) + return OptionMulti.this.options(); + + List