You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by ja...@apache.org on 2016/08/01 16:25:35 UTC
cassandra git commit: Add version command to cassandra stress
Repository: cassandra
Updated Branches:
refs/heads/trunk 7eb9531a4 -> eaf4b91ae
Add version command to cassandra stress
Patch by Chris Batey; reviewed by tjake for CASSANDRA-12258
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/eaf4b91a
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/eaf4b91a
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/eaf4b91a
Branch: refs/heads/trunk
Commit: eaf4b91ae33cf623eed2fc0a934ce658a7ec49bb
Parents: 7eb9531
Author: Chris Batey <ch...@gmail.com>
Authored: Thu Jul 21 11:35:24 2016 +0100
Committer: T Jake Luciani <ja...@apache.org>
Committed: Mon Aug 1 12:25:23 2016 -0400
----------------------------------------------------------------------
CHANGES.txt | 1 +
.../cassandra/stress/settings/Command.java | 3 +-
.../cassandra/stress/settings/SettingsMisc.java | 65 ++++++++++++++++----
.../stress/settings/SettingsMiscTest.java | 55 +++++++++++++++++
4 files changed, 110 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaf4b91a/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index f759b7e..f9ff43d 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,4 +1,5 @@
3.10
+ * Add version command to cassandra-stress (CASSANDRA-12258)
* Create compaction-stress tool (CASSANDRA-11844)
* Garbage-collecting compaction operation and schema option (CASSANDRA-7019)
* Add schema to snapshot manifest, add USING TIMESTAMP clause to ALTER TABLE statements (CASSANDRA-7190)
http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaf4b91a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java
----------------------------------------------------------------------
diff --git a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java b/tools/stress/src/org/apache/cassandra/stress/settings/Command.java
index c47c5d2..d8ac5d1 100644
--- a/tools/stress/src/org/apache/cassandra/stress/settings/Command.java
+++ b/tools/stress/src/org/apache/cassandra/stress/settings/Command.java
@@ -61,7 +61,8 @@ public enum Command
HELP(false, null, "-?", "Print help for a command or option", null),
PRINT(false, null, "Inspect the output of a distribution definition", null),
- LEGACY(false, null, "Legacy support mode", null)
+ LEGACY(false, null, "Legacy support mode", null),
+ VERSION(false, null, "Print the version of cassandra stress", null)
;
private static final Map<String, Command> LOOKUP;
http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaf4b91a/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 5735f9d..7f2335f 100644
--- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java
+++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsMisc.java
@@ -21,15 +21,22 @@ package org.apache.cassandra.stress.settings;
*/
+import java.io.IOException;
import java.io.PrintStream;
import java.io.Serializable;
+import java.net.URL;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+import com.google.common.base.Charsets;
+import com.google.common.io.Resources;
import org.apache.cassandra.stress.generate.Distribution;
-public class SettingsMisc implements Serializable
+class SettingsMisc implements Serializable
{
static boolean maybeDoSpecial(Map<String, String[]> clArgs)
@@ -38,10 +45,12 @@ public class SettingsMisc implements Serializable
return true;
if (maybePrintDistribution(clArgs))
return true;
+ if (maybePrintVersion(clArgs))
+ return true;
return false;
}
- static final class PrintDistribution extends GroupedOptions
+ private static final class PrintDistribution extends GroupedOptions
{
final OptionDistribution dist = new OptionDistribution("dist=", null, "A mathematical distribution");
@@ -52,7 +61,8 @@ public class SettingsMisc implements Serializable
}
}
- static boolean maybePrintDistribution(Map<String, String[]> clArgs)
+
+ private static boolean maybePrintDistribution(Map<String, String[]> clArgs)
{
final String[] args = clArgs.get("print");
if (args == null)
@@ -68,17 +78,17 @@ public class SettingsMisc implements Serializable
return true;
}
- static void printDistribution(Distribution dist)
+ private static void printDistribution(Distribution dist)
{
PrintStream out = System.out;
out.println("% of samples Range % of total");
String format = "%-16.1f%-12d%12.1f";
double rangemax = dist.inverseCumProb(1d) / 100d;
- for (double d : new double[] { 0.1d, 0.2d, 0.3d, 0.4d, 0.5d, 0.6d, 0.7d, 0.8d, 0.9d, 0.95d, 0.99d, 1d })
+ for (double d : new double[]{ 0.1d, 0.2d, 0.3d, 0.4d, 0.5d, 0.6d, 0.7d, 0.8d, 0.9d, 0.95d, 0.99d, 1d })
{
double sampleperc = d * 100;
long max = dist.inverseCumProb(d);
- double rangeperc = max/ rangemax;
+ double rangeperc = max / rangemax;
out.println(String.format(format, sampleperc, max, rangeperc));
}
}
@@ -98,7 +108,7 @@ public class SettingsMisc implements Serializable
{
String p = clArgs.keySet().iterator().next();
if (clArgs.get(p).length == 0)
- params = new String[] {p};
+ params = new String[]{ p };
}
}
else
@@ -115,6 +125,37 @@ public class SettingsMisc implements Serializable
throw new IllegalArgumentException("Invalid command/option provided to help");
}
+ private static boolean maybePrintVersion(Map<String, String[]> clArgs)
+ {
+ if (clArgs.containsKey("version"))
+ {
+ try
+ {
+ URL url = Resources.getResource("org/apache/cassandra/config/version.properties");
+ System.out.println(parseVersionFile(Resources.toString(url, Charsets.UTF_8)));
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace(System.err);
+ }
+ return true;
+ }
+ return false;
+ }
+
+ static String parseVersionFile(String versionFileContents)
+ {
+ Matcher matcher = Pattern.compile(".*?CassandraVersion=(.*?)$").matcher(versionFileContents);
+ if (matcher.find())
+ {
+ return "Version: " + matcher.group(1);
+ }
+ else
+ {
+ return "Unable to find version information";
+ }
+ }
+
public static void printHelp()
{
System.out.println("Usage: cassandra-stress <command> [options]");
@@ -151,7 +192,7 @@ public class SettingsMisc implements Serializable
throw new IllegalArgumentException("Invalid command or option provided to command help");
}
- public static Runnable helpHelpPrinter()
+ static Runnable helpHelpPrinter()
{
return new Runnable()
{
@@ -169,7 +210,7 @@ public class SettingsMisc implements Serializable
};
}
- public static Runnable printHelpPrinter()
+ static Runnable printHelpPrinter()
{
return new Runnable()
{
@@ -188,7 +229,7 @@ public class SettingsMisc implements Serializable
};
}
- public static Runnable sendToDaemonHelpPrinter()
+ static Runnable sendToDaemonHelpPrinter()
{
return new Runnable()
{
@@ -202,7 +243,7 @@ public class SettingsMisc implements Serializable
};
}
- public static String getSendToDaemon(Map<String, String[]> clArgs)
+ static String getSendToDaemon(Map<String, String[]> clArgs)
{
String[] params = clArgs.remove("-send-to");
if (params == null)
@@ -216,7 +257,5 @@ public class SettingsMisc implements Serializable
System.exit(1);
}
return params[0];
-
}
-
}
http://git-wip-us.apache.org/repos/asf/cassandra/blob/eaf4b91a/tools/stress/test/unit/org/apache/cassandra/stress/settings/SettingsMiscTest.java
----------------------------------------------------------------------
diff --git a/tools/stress/test/unit/org/apache/cassandra/stress/settings/SettingsMiscTest.java b/tools/stress/test/unit/org/apache/cassandra/stress/settings/SettingsMiscTest.java
new file mode 100644
index 0000000..78d9817
--- /dev/null
+++ b/tools/stress/test/unit/org/apache/cassandra/stress/settings/SettingsMiscTest.java
@@ -0,0 +1,55 @@
+/*
+ * 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.
+ */
+
+package org.apache.cassandra.stress.settings;
+
+import java.util.Collections;
+
+import com.google.common.collect.ImmutableMap;
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+public class SettingsMiscTest
+{
+ @Test
+ public void versionTriggersSpecialOption() throws Exception
+ {
+ assertTrue(SettingsMisc.maybeDoSpecial(ImmutableMap.of("version", new String[] {})));
+ }
+
+ @Test
+ public void noSpecialOptions() throws Exception
+ {
+ assertFalse(SettingsMisc.maybeDoSpecial(Collections.emptyMap()));
+ }
+
+ @Test
+ public void parsesVersionMatch() throws Exception
+ {
+ String versionString = SettingsMisc.parseVersionFile("CassandraVersion=TheBestVersion\n");
+ assertEquals("Version: TheBestVersion", versionString);
+ }
+
+ @Test
+ public void parsesVersionNoMatch() throws Exception
+ {
+ String versionString = SettingsMisc.parseVersionFile("VersionFileChangedFormat :(");
+ assertEquals("Unable to find version information", versionString);
+ }
+}