diff --git a/CHANGES.txt b/CHANGES.txt index 085bb8a2a9..582566e7e0 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -74,7 +74,7 @@ * Fix backwards compatibilty for CQL memtable properties (CASSANDRA-3190) * Add five-minute delay before starting compactions on a restarted server (CASSANDRA-3181) - + * support of compaction strategy option for stress.java (CASSANDRA-3204) 0.8.6 * avoid trying to watch cassandra-topology.properties when loaded from jar diff --git a/src/java/org/apache/cassandra/config/CFMetaData.java b/src/java/org/apache/cassandra/config/CFMetaData.java index 3d2cd5d11d..34118bb00f 100644 --- a/src/java/org/apache/cassandra/config/CFMetaData.java +++ b/src/java/org/apache/cassandra/config/CFMetaData.java @@ -776,7 +776,7 @@ public final class CFMetaData logger.debug("application result is {}", this); } - private static Class createCompactionSrategy(String className) throws ConfigurationException + public static Class createCompactionSrategy(String className) throws ConfigurationException { className = className.contains(".") ? className : "org.apache.cassandra.db.compaction." + className; try diff --git a/tools/stress/src/org/apache/cassandra/stress/Session.java b/tools/stress/src/org/apache/cassandra/stress/Session.java index e1df2845d3..abbea504e3 100644 --- a/tools/stress/src/org/apache/cassandra/stress/Session.java +++ b/tools/stress/src/org/apache/cassandra/stress/Session.java @@ -25,7 +25,9 @@ import java.util.*; import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicLong; +import org.apache.cassandra.config.CFMetaData; import org.apache.cassandra.config.ConfigurationException; +import org.apache.cassandra.db.compaction.AbstractCompactionStrategy; import org.apache.cassandra.db.marshal.AbstractType; import org.apache.cassandra.db.marshal.TypeParser; import org.apache.commons.cli.*; @@ -86,6 +88,7 @@ public class Session implements Serializable availableOptions.addOption("T", "send-to", true, "Send this as a request to the stress daemon at specified address."); availableOptions.addOption("I", "compression", true, "Specify the compression to use for sstable, default:no compression"); availableOptions.addOption("Q", "query-names", true, "Comma-separated list of column names to retrieve from each row."); + availableOptions.addOption("Z", "compaction-strategy", true, "CompactionStrategy to use."); } private int numKeys = 1000 * 1000; @@ -102,6 +105,7 @@ public class Session implements Serializable private int port = 9160; private int superColumns = 1; private String compression = null; + private String compactionStrategy = null; private int progressInterval = 10; private int keysPerCall = 1000; @@ -301,6 +305,22 @@ public class Session implements Serializable { columnNames = null; } + + if (cmd.hasOption("Z")) + { + compactionStrategy = cmd.getOptionValue("Z"); + + try + { + // validate compaction strategy class + CFMetaData.createCompactionSrategy(compactionStrategy); + } + catch (ConfigurationException e) + { + System.err.println(e.getMessage()); + System.exit(1); + } + } } catch (ParseException e) { @@ -483,6 +503,14 @@ public class Session implements Serializable keyspace.setStrategy_options(replicationStrategyOptions); } + if (compactionStrategy != null) + { + standardCfDef.setCompaction_strategy(compactionStrategy); + superCfDef.setCompaction_strategy(compactionStrategy); + counterCfDef.setCompaction_strategy(compactionStrategy); + counterSuperCfDef.setCompaction_strategy(compactionStrategy); + } + keyspace.setCf_defs(new ArrayList(Arrays.asList(standardCfDef, superCfDef, counterCfDef, counterSuperCfDef))); Cassandra.Client client = getClient(false);