Repository: cassandra Updated Branches: refs/heads/trunk c0aa7467e -> 67feb71ee
http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java deleted file mode 100644 index 79937b6..0000000 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandMulti.java +++ /dev/null @@ -1,90 +0,0 @@ -package org.apache.cassandra.stress.settings; -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - - -import java.util.ArrayList; -import java.util.List; - -// Settings common to commands that operate over multiple keys at once -public class SettingsCommandMulti extends SettingsCommand -{ - - public final int keysAtOnce; - - public SettingsCommandMulti(Command type, Options options) - { - super(type, options.parent); - this.keysAtOnce = Integer.parseInt(options.maxKeys.value()); - } - - // Option Declarations - - static final class Options extends GroupedOptions - { - final GroupedOptions parent; - Options(GroupedOptions parent) - { - this.parent = parent; - } - final OptionSimple maxKeys = new OptionSimple("at-once=", "[0-9]+", "1000", "Number of keys per operation", false); - - @Override - public List<? extends Option> options() - { - final List<Option> options = new ArrayList<>(); - options.add(maxKeys); - options.addAll(parent.options()); - return options; - } - } - - // CLI Utility Methods - - public static SettingsCommand build(Command type, String[] params) - { - GroupedOptions options = GroupedOptions.select(params, new Options(new Uncertainty()), new Options(new Count())); - if (options == null) - { - printHelp(type); - System.out.println("Invalid " + type + " options provided, see output for valid options"); - System.exit(1); - } - return new SettingsCommandMulti(type, (Options) options); - } - - public static void printHelp(Command type) - { - GroupedOptions.printOptions(System.out, type.toString().toLowerCase(), new Options(new Uncertainty()), new Options(new Count())); - } - - public static Runnable helpPrinter(final Command type) - { - return new Runnable() - { - @Override - public void run() - { - printHelp(type); - } - }; - } -} http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java index c742274..9818d363 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsKey.java @@ -63,7 +63,7 @@ public class SettingsKey implements Serializable public DistributionOptions(String defaultLimit) { - dist = new OptionDistribution("dist=", "GAUSSIAN(1.." + defaultLimit + ")"); + dist = new OptionDistribution("dist=", "GAUSSIAN(1.." + defaultLimit + ")", "Keys are selected from this distribution"); } @Override http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java index dfb29c5..e47f85f 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java @@ -43,7 +43,7 @@ public class SettingsMisc implements Serializable static final class PrintDistribution extends GroupedOptions { - final OptionDistribution dist = new OptionDistribution("dist=", null); + final OptionDistribution dist = new OptionDistribution("dist=", null, "A mathematical distribution"); @Override public List<? extends Option> options() @@ -180,7 +180,7 @@ public class SettingsMisc implements Serializable @Override public List<? extends Option> options() { - return Arrays.asList(new OptionDistribution("dist=", null)); + return Arrays.asList(new OptionDistribution("dist=", null, "A mathematical distribution")); } }); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMode.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMode.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMode.java index eef8c39..95c3da3 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMode.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMode.java @@ -42,7 +42,7 @@ public class SettingsMode implements Serializable { cqlVersion = CqlVersion.CQL3; Cql3Options opts = (Cql3Options) options; - api = opts.useNative.setByUser() ? ConnectionAPI.JAVA_DRIVER_NATIVE : ConnectionAPI.THRIFT; + api = opts.mode().displayPrefix.equals("native") ? ConnectionAPI.JAVA_DRIVER_NATIVE : ConnectionAPI.THRIFT; style = opts.usePrepared.setByUser() ? ConnectionStyle.CQL_PREPARED : ConnectionStyle.CQL; compression = ProtocolOptions.Compression.valueOf(opts.useCompression.value().toUpperCase()).name(); } @@ -54,11 +54,11 @@ public class SettingsMode implements Serializable style = opts.usePrepared.setByUser() ? ConnectionStyle.CQL_PREPARED : ConnectionStyle.CQL; compression = ProtocolOptions.Compression.NONE.name(); } - else if (options instanceof Cql2Options) + else if (options instanceof Cql2ThriftOptions) { cqlVersion = CqlVersion.CQL2; api = ConnectionAPI.THRIFT; - Cql2Options opts = (Cql2Options) options; + Cql2ThriftOptions opts = (Cql2ThriftOptions) options; style = opts.usePrepared.setByUser() ? ConnectionStyle.CQL_PREPARED : ConnectionStyle.CQL; compression = ProtocolOptions.Compression.NONE.name(); } @@ -81,21 +81,40 @@ public class SettingsMode implements Serializable // Option Declarations - private static final class Cql3Options extends GroupedOptions + private static final class Cql3NativeOptions extends Cql3Options + { + final OptionSimple mode = new OptionSimple("native", "", null, "", true); + OptionSimple mode() + { + return mode; + } + } + + private static final class Cql3ThriftOptions extends Cql3Options + { + final OptionSimple mode = new OptionSimple("thrift", "", null, "", true); + OptionSimple mode() + { + return mode; + } + } + + private static abstract class Cql3Options extends GroupedOptions { final OptionSimple api = new OptionSimple("cql3", "", null, "", true); - final OptionSimple useNative = new OptionSimple("native", "", null, "", false); final OptionSimple usePrepared = new OptionSimple("prepared", "", null, "", false); final OptionSimple useCompression = new OptionSimple("compression=", "none|lz4|snappy", "none", "", false); final OptionSimple port = new OptionSimple("port=", "[0-9]+", "9046", "", false); + abstract OptionSimple mode(); @Override public List<? extends Option> options() { - return Arrays.asList(useNative, usePrepared, api, useCompression, port); + return Arrays.asList(mode(), usePrepared, api, useCompression, port); } } + private static final class Cql3SimpleNativeOptions extends GroupedOptions { final OptionSimple api = new OptionSimple("cql3", "", null, "", true); @@ -110,15 +129,16 @@ public class SettingsMode implements Serializable } } - private static final class Cql2Options extends GroupedOptions + private static final class Cql2ThriftOptions extends GroupedOptions { final OptionSimple api = new OptionSimple("cql2", "", null, "", true); + final OptionSimple mode = new OptionSimple("thrift", "", null, "", true); final OptionSimple usePrepared = new OptionSimple("prepared", "", null, "", false); @Override public List<? extends Option> options() { - return Arrays.asList(usePrepared, api); + return Arrays.asList(mode, api, usePrepared); } } @@ -146,7 +166,7 @@ public class SettingsMode implements Serializable return new SettingsMode(opts); } - GroupedOptions options = GroupedOptions.select(params, new ThriftOptions(), new Cql2Options(), new Cql3Options(), new Cql3SimpleNativeOptions()); + GroupedOptions options = GroupedOptions.select(params, new ThriftOptions(), new Cql3NativeOptions(), new Cql3ThriftOptions(), new Cql3SimpleNativeOptions(), new Cql2ThriftOptions()); if (options == null) { printHelp(); @@ -158,7 +178,7 @@ public class SettingsMode implements Serializable public static void printHelp() { - GroupedOptions.printOptions(System.out, "-mode", new ThriftOptions(), new Cql2Options(), new Cql3Options(), new Cql3SimpleNativeOptions()); + GroupedOptions.printOptions(System.out, "-mode", new ThriftOptions(), new Cql3NativeOptions(), new Cql3ThriftOptions(), new Cql3SimpleNativeOptions(), new Cql2ThriftOptions()); } public static Runnable helpPrinter() http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java index 5b5333c..33af446 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsSchema.java @@ -45,7 +45,6 @@ public class SettingsSchema implements Serializable private final String compactionStrategy; private final Map<String, String> compactionStrategyOptions; public final String keyspace; - public final String columnFamily; public SettingsSchema(Options options) { @@ -60,7 +59,6 @@ public class SettingsSchema implements Serializable compactionStrategy = options.compaction.getStrategy(); compactionStrategyOptions = options.compaction.getOptions(); keyspace = options.keyspace.value(); - columnFamily = options.columnFamily.value(); } public void createKeySpaces(StressSettings settings) @@ -77,7 +75,7 @@ public class SettingsSchema implements Serializable KsDef ksdef = new KsDef(); // column family for standard columns - CfDef standardCfDef = new CfDef(keyspace, columnFamily); + CfDef standardCfDef = new CfDef(keyspace, "Standard1"); Map<String, String> compressionOptions = new HashMap<String, String>(); if (compression != null) compressionOptions.put("sstable_compression", compression); @@ -202,14 +200,13 @@ public class SettingsSchema implements Serializable final OptionCompaction compaction = new OptionCompaction(); final OptionSimple index = new OptionSimple("index=", "KEYS|CUSTOM|COMPOSITES", null, "Type of index to create on needed column families (KEYS)", false); final OptionSimple keyspace = new OptionSimple("keyspace=", ".*", "Keyspace1", "The keyspace name to use", false); - final OptionSimple columnFamily = new OptionSimple("columnfamily=", ".*", "Standard1", "The column family name to use", false); final OptionSimple noReplicateOnWrite = new OptionSimple("no-replicate-on-write", "", null, "Set replicate_on_write to false for counters. Only counter add with CL=ONE will work", false); final OptionSimple compression = new OptionSimple("compression=", ".*", null, "Specify the compression to use for sstable, default:no compression", false); @Override public List<? extends Option> options() { - return Arrays.asList(replication, index, keyspace, columnFamily, compaction, noReplicateOnWrite, compression); + return Arrays.asList(replication, index, keyspace, compaction, noReplicateOnWrite, compression); } } http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/SettingsTransport.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsTransport.java b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsTransport.java index ebf26b1..396095d 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsTransport.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsTransport.java @@ -47,7 +47,7 @@ public class SettingsTransport implements Serializable { Class<?> clazz = Class.forName(fqFactoryClass); if (!ITransportFactory.class.isAssignableFrom(clazz)) - throw new ClassCastException(); + throw new IllegalArgumentException(clazz + " is not a valid transport factory"); // check we can instantiate it clazz.newInstance(); } http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/settings/StressSettings.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/StressSettings.java b/tools/stress/src/org/apache/cassandra/stress/settings/StressSettings.java index 865f864..95ec75b 100644 --- a/tools/stress/src/org/apache/cassandra/stress/settings/StressSettings.java +++ b/tools/stress/src/org/apache/cassandra/stress/settings/StressSettings.java @@ -172,12 +172,21 @@ public class StressSettings implements Serializable public static StressSettings parse(String[] args) { - final Map<String, String[]> clArgs = parseMap(args); - if (clArgs.containsKey("legacy")) - return Legacy.build(Arrays.copyOfRange(args, 1, args.length)); - if (SettingsMisc.maybeDoSpecial(clArgs)) + try + { + final Map<String, String[]> clArgs = parseMap(args); + if (clArgs.containsKey("legacy")) + return Legacy.build(Arrays.copyOfRange(args, 1, args.length)); + if (SettingsMisc.maybeDoSpecial(clArgs)) + System.exit(1); + return get(clArgs); + } + catch (IllegalArgumentException e) + { + System.out.println(e.getMessage()); System.exit(1); - return get(clArgs); + throw new AssertionError(); + } } public static StressSettings get(Map<String, String[]> clArgs) @@ -231,17 +240,24 @@ public class StressSettings implements Serializable if (i == 0 || args[i].startsWith("-")) { if (i > 0) - r.put(key, params.toArray(new String[0])); + putParam(key, params.toArray(new String[0]), r); key = args[i].toLowerCase(); params.clear(); } else params.add(args[i]); } - r.put(key, params.toArray(new String[0])); + putParam(key, params.toArray(new String[0]), r); return r; } + private static void putParam(String key, String[] args, Map<String, String[]> clArgs) + { + String[] prev = clArgs.put(key, args); + if (prev != null) + throw new IllegalArgumentException(key + " is defined multiple times. Each option/command can be specified at most once."); + } + public static void printHelp() { SettingsMisc.printHelp(); http://git-wip-us.apache.org/repos/asf/cassandra/blob/3e2c6105/tools/stress/src/org/apache/cassandra/stress/util/JavaDriverClient.java ---------------------------------------------------------------------- diff --git a/tools/stress/src/org/apache/cassandra/stress/util/JavaDriverClient.java b/tools/stress/src/org/apache/cassandra/stress/util/JavaDriverClient.java index 7bde900..f50aa81 100644 --- a/tools/stress/src/org/apache/cassandra/stress/util/JavaDriverClient.java +++ b/tools/stress/src/org/apache/cassandra/stress/util/JavaDriverClient.java @@ -103,11 +103,11 @@ public class JavaDriverClient return getSession().execute(stmt); } - public ResultSet executePrepared(PreparedStatement stmt, List<ByteBuffer> queryParams, org.apache.cassandra.db.ConsistencyLevel consistency) + public ResultSet executePrepared(PreparedStatement stmt, List<Object> queryParams, org.apache.cassandra.db.ConsistencyLevel consistency) { stmt.setConsistencyLevel(from(consistency)); - BoundStatement bstmt = stmt.bind((Object[]) queryParams.toArray(new ByteBuffer[queryParams.size()])); + BoundStatement bstmt = stmt.bind((Object[]) queryParams.toArray(new Object[queryParams.size()])); return getSession().execute(bstmt); }