From 03ad8cdf4da9df2b7982490bdd3fcea9b1000567 Mon Sep 17 00:00:00 2001 From: Vijay Parthasarathy Date: Wed, 18 Apr 2012 09:05:12 -0700 Subject: [PATCH 1/8] make stress executable --- tools/bin/stress | 0 tools/bin/stress.bat | 0 tools/bin/stressd | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/bin/stress mode change 100644 => 100755 tools/bin/stress.bat mode change 100644 => 100755 tools/bin/stressd diff --git a/tools/bin/stress b/tools/bin/stress old mode 100644 new mode 100755 diff --git a/tools/bin/stress.bat b/tools/bin/stress.bat old mode 100644 new mode 100755 diff --git a/tools/bin/stressd b/tools/bin/stressd old mode 100644 new mode 100755 From 03d3833589c0863e8bd7fe38c9df2c4299321931 Mon Sep 17 00:00:00 2001 From: Vijay Parthasarathy Date: Wed, 18 Apr 2012 09:05:12 -0700 Subject: [PATCH 2/8] make stress executable --- tools/bin/stress | 0 tools/bin/stress.bat | 0 tools/bin/stressd | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/bin/stress mode change 100644 => 100755 tools/bin/stress.bat mode change 100644 => 100755 tools/bin/stressd diff --git a/tools/bin/stress b/tools/bin/stress old mode 100644 new mode 100755 diff --git a/tools/bin/stress.bat b/tools/bin/stress.bat old mode 100644 new mode 100755 diff --git a/tools/bin/stressd b/tools/bin/stressd old mode 100644 new mode 100755 From 8c9d0fb72a941a2e3153e96143a219fa25d182b0 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 18 Apr 2012 11:10:23 -0500 Subject: [PATCH 3/8] Revert "allow running stress from build classes" and "Add stress tool to binaries" This reverts commits cb7a931ffcda61392d59c995c6733c20e47c98f0 and 9b746daf7f2d0725b6ebe678dfbedb303b71bf57. --- build.xml | 48 +-------------------- tools/{ => stress}/bin/stress | 25 ++++++----- tools/{ => stress}/bin/stress.bat | 4 +- tools/{ => stress}/bin/stressd | 25 ++++++----- tools/stress/build.xml | 70 +++++++++++++++++++++++++++++++ 5 files changed, 103 insertions(+), 69 deletions(-) rename tools/{ => stress}/bin/stress (67%) rename tools/{ => stress}/bin/stress.bat (85%) mode change 100755 => 100644 rename tools/{ => stress}/bin/stressd (76%) create mode 100644 tools/stress/build.xml diff --git a/build.xml b/build.xml index 885b94812117..ebd80f694fec 100644 --- a/build.xml +++ b/build.xml @@ -670,34 +670,12 @@ - - - - - - - - - - - - - - - - - - - - - - @@ -759,20 +737,6 @@ - - - - - - - - - - - - - - - diff --git a/tools/bin/stress b/tools/stress/bin/stress similarity index 67% rename from tools/bin/stress rename to tools/stress/bin/stress index 8c8d22fb8c7d..4e606864f033 100755 --- a/tools/bin/stress +++ b/tools/stress/bin/stress @@ -17,19 +17,22 @@ # limitations under the License. if [ "x$CLASSPATH" = "x" ]; then - - # execute from the build dir. - if [ -d `dirname $0`/../../build/classes ]; then - for directory in `dirname $0`/../../build/classes/*; do - CLASSPATH=$CLASSPATH:$directory - done - else - if [ -f `dirname $0`/../lib/stress.jar ]; then - CLASSPATH=`dirname $0`/../lib/stress.jar - fi + # Cassandra class files. + if [ ! -d `dirname $0`/../../../build/classes/main ]; then + echo "Unable to locate cassandra class files" >&2 + exit 1 fi - for jar in `dirname $0`/../../lib/*.jar; do + # Stress class files. + if [ ! -d `dirname $0`/../build/classes ]; then + echo "Unable to locate stress class files" >&2 + exit 1 + fi + + CLASSPATH=`dirname $0`/../../../build/classes/main + CLASSPATH=$CLASSPATH:`dirname $0`/../../../build/classes/thrift + CLASSPATH=$CLASSPATH:`dirname $0`/../build/classes + for jar in `dirname $0`/../../../lib/*.jar; do CLASSPATH=$CLASSPATH:$jar done fi diff --git a/tools/bin/stress.bat b/tools/stress/bin/stress.bat old mode 100755 new mode 100644 similarity index 85% rename from tools/bin/stress.bat rename to tools/stress/bin/stress.bat index 78e8dbbeb691..f7b04218d79c --- a/tools/bin/stress.bat +++ b/tools/stress/bin/stress.bat @@ -18,7 +18,9 @@ if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD%\..\.. if NOT DEFINED STRESS_HOME set STRESS_HOME=%CD% -set CLASSPATH="%STRESS_HOME%\..\lib\*.jar" +set CLASSPATH="%STRESS_HOME%\build\classes" +set CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\main" +set CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\thrift" for %%i in ("%CASSANDRA_HOME%\lib\*.jar") do call :append "%%i" set CLASSPATH=%CLASSPATH%;"%%i" goto start diff --git a/tools/bin/stressd b/tools/stress/bin/stressd similarity index 76% rename from tools/bin/stressd rename to tools/stress/bin/stressd index 400ebb062595..5cc3ff2d4651 100755 --- a/tools/bin/stressd +++ b/tools/stress/bin/stressd @@ -19,19 +19,22 @@ DESC="Stress Test Daemon" if [ "x$CLASSPATH" = "x" ]; then - - # execute from the build dir. - if [ -d `dirname $0`/../../build/classes ]; then - for directory in `dirname $0`/../../build/classes/*; do - CLASSPATH=$CLASSPATH:$directory - done - else - if [ -f `dirname $0`/../lib/stress.jar ]; then - CLASSPATH=`dirname $0`/../lib/stress.jar - fi + # Cassandra class files. + if [ ! -d `dirname $0`/../../../build/classes/main ]; then + echo "Unable to locate cassandra class files" >&2 + exit 1 + fi + + # Stress class files. + if [ ! -d `dirname $0`/../build/classes ]; then + echo "Unable to locate stress class files" >&2 + exit 1 fi - for jar in `dirname $0`/../../lib/*.jar; do + CLASSPATH=`dirname $0`/../../../build/classes/main + CLASSPATH=$CLASSPATH:`dirname $0`/../../../build/classes/thrift + CLASSPATH=$CLASSPATH:`dirname $0`/../build/classes + for jar in `dirname $0`/../../../lib/*.jar; do CLASSPATH=$CLASSPATH:$jar done fi diff --git a/tools/stress/build.xml b/tools/stress/build.xml new file mode 100644 index 000000000000..a186ecfa5986 --- /dev/null +++ b/tools/stress/build.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 512946c3882a0a6bb25627a4e218c743eaf48736 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 18 Apr 2012 11:21:42 -0500 Subject: [PATCH 4/8] add back tools/bin after merging revert from 1.0 --- build.xml | 48 ++++++++++++++++++++- tools/{stress => }/bin/stress | 25 +++++------ tools/{stress => }/bin/stress.bat | 4 +- tools/{stress => }/bin/stressd | 25 +++++------ tools/stress/build.xml | 70 ------------------------------- 5 files changed, 69 insertions(+), 103 deletions(-) rename tools/{stress => }/bin/stress (67%) mode change 100755 => 100644 rename tools/{stress => }/bin/stress.bat (85%) mode change 100755 => 100644 rename tools/{stress => }/bin/stressd (76%) mode change 100755 => 100644 delete mode 100644 tools/stress/build.xml diff --git a/build.xml b/build.xml index 9d0ea3ea474e..6ec0cdee6e47 100644 --- a/build.xml +++ b/build.xml @@ -684,12 +684,34 @@ + + + + + + + + + + + + + + + + + + + + + + @@ -751,6 +773,20 @@ + + + + + + + + + + + + + + + diff --git a/tools/stress/bin/stress b/tools/bin/stress old mode 100755 new mode 100644 similarity index 67% rename from tools/stress/bin/stress rename to tools/bin/stress index 4e606864f033..8c8d22fb8c7d --- a/tools/stress/bin/stress +++ b/tools/bin/stress @@ -17,22 +17,19 @@ # limitations under the License. if [ "x$CLASSPATH" = "x" ]; then - # Cassandra class files. - if [ ! -d `dirname $0`/../../../build/classes/main ]; then - echo "Unable to locate cassandra class files" >&2 - exit 1 + + # execute from the build dir. + if [ -d `dirname $0`/../../build/classes ]; then + for directory in `dirname $0`/../../build/classes/*; do + CLASSPATH=$CLASSPATH:$directory + done + else + if [ -f `dirname $0`/../lib/stress.jar ]; then + CLASSPATH=`dirname $0`/../lib/stress.jar + fi fi - # Stress class files. - if [ ! -d `dirname $0`/../build/classes ]; then - echo "Unable to locate stress class files" >&2 - exit 1 - fi - - CLASSPATH=`dirname $0`/../../../build/classes/main - CLASSPATH=$CLASSPATH:`dirname $0`/../../../build/classes/thrift - CLASSPATH=$CLASSPATH:`dirname $0`/../build/classes - for jar in `dirname $0`/../../../lib/*.jar; do + for jar in `dirname $0`/../../lib/*.jar; do CLASSPATH=$CLASSPATH:$jar done fi diff --git a/tools/stress/bin/stress.bat b/tools/bin/stress.bat old mode 100755 new mode 100644 similarity index 85% rename from tools/stress/bin/stress.bat rename to tools/bin/stress.bat index f7b04218d79c..78e8dbbeb691 --- a/tools/stress/bin/stress.bat +++ b/tools/bin/stress.bat @@ -18,9 +18,7 @@ if NOT DEFINED CASSANDRA_HOME set CASSANDRA_HOME=%CD%\..\.. if NOT DEFINED STRESS_HOME set STRESS_HOME=%CD% -set CLASSPATH="%STRESS_HOME%\build\classes" -set CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\main" -set CLASSPATH=%CLASSPATH%;"%CASSANDRA_HOME%\build\classes\thrift" +set CLASSPATH="%STRESS_HOME%\..\lib\*.jar" for %%i in ("%CASSANDRA_HOME%\lib\*.jar") do call :append "%%i" set CLASSPATH=%CLASSPATH%;"%%i" goto start diff --git a/tools/stress/bin/stressd b/tools/bin/stressd old mode 100755 new mode 100644 similarity index 76% rename from tools/stress/bin/stressd rename to tools/bin/stressd index 5cc3ff2d4651..400ebb062595 --- a/tools/stress/bin/stressd +++ b/tools/bin/stressd @@ -19,22 +19,19 @@ DESC="Stress Test Daemon" if [ "x$CLASSPATH" = "x" ]; then - # Cassandra class files. - if [ ! -d `dirname $0`/../../../build/classes/main ]; then - echo "Unable to locate cassandra class files" >&2 - exit 1 - fi - - # Stress class files. - if [ ! -d `dirname $0`/../build/classes ]; then - echo "Unable to locate stress class files" >&2 - exit 1 + + # execute from the build dir. + if [ -d `dirname $0`/../../build/classes ]; then + for directory in `dirname $0`/../../build/classes/*; do + CLASSPATH=$CLASSPATH:$directory + done + else + if [ -f `dirname $0`/../lib/stress.jar ]; then + CLASSPATH=`dirname $0`/../lib/stress.jar + fi fi - CLASSPATH=`dirname $0`/../../../build/classes/main - CLASSPATH=$CLASSPATH:`dirname $0`/../../../build/classes/thrift - CLASSPATH=$CLASSPATH:`dirname $0`/../build/classes - for jar in `dirname $0`/../../../lib/*.jar; do + for jar in `dirname $0`/../../lib/*.jar; do CLASSPATH=$CLASSPATH:$jar done fi diff --git a/tools/stress/build.xml b/tools/stress/build.xml deleted file mode 100644 index a186ecfa5986..000000000000 --- a/tools/stress/build.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - From 54729ad2ca426c020eb8d2975b48c360393eb4bc Mon Sep 17 00:00:00 2001 From: Vijay Parthasarathy Date: Wed, 18 Apr 2012 09:33:20 -0700 Subject: [PATCH 5/8] making stress executable --- tools/bin/stress | 0 tools/bin/stress.bat | 0 tools/bin/stressd | 0 3 files changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 tools/bin/stress mode change 100644 => 100755 tools/bin/stress.bat mode change 100644 => 100755 tools/bin/stressd diff --git a/tools/bin/stress b/tools/bin/stress old mode 100644 new mode 100755 diff --git a/tools/bin/stress.bat b/tools/bin/stress.bat old mode 100644 new mode 100755 diff --git a/tools/bin/stressd b/tools/bin/stressd old mode 100644 new mode 100755 From 762b455978a67c00a2e3a7d5f0a2ef02f0bae98d Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 18 Apr 2012 11:32:01 -0500 Subject: [PATCH 6/8] update CHANGES, NEWS --- CHANGES.txt | 2 ++ NEWS.txt | 3 +++ 2 files changed, 5 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 720289faf892..3644c337257a 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -4,9 +4,11 @@ Merged from 1.0: * avoid streaming empty files with bulk loader if sstablewriter errors out (CASSANDRA-3946) + * fix stress build (CASSANDRA-4140) 1.1-rc1 + * Include stress tool in binary builds (CASSANDRA-4103) * (Hadoop) fix wide row iteration when last row read was deleted (CASSANDRA-4154) * fix read_repair_chance to really default to 0.1 in the cli (CASSANDRA-4114) diff --git a/NEWS.txt b/NEWS.txt index eca9e02c952d..9eeb4be2b053 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -76,6 +76,9 @@ Features threshold. - Off-heap caches no longer require JNA. - Streaming is now multithreaded. + - Compactions may now be aborted via JMX or nodetool. + - The stress tool is not new in 1.1, but it is newly included in + binary builds as well as the source tree 1.0.8 From 82464931cf0a18403462e1443108a19d094c4f74 Mon Sep 17 00:00:00 2001 From: Brandon Williams Date: Wed, 18 Apr 2012 11:42:52 -0500 Subject: [PATCH 7/8] update stress readme --- tools/stress/README.txt | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tools/stress/README.txt b/tools/stress/README.txt index 76f04a4c9f05..4a43a2d9ea73 100644 --- a/tools/stress/README.txt +++ b/tools/stress/README.txt @@ -8,8 +8,7 @@ cluster. It is significantly faster than the older py_stress tool. Setup ----- -Run `ant` from the Cassandra source directory, then Run `ant` from the -contrib/stress directory. +Run `ant` from the Cassandra source directory, then stress can be invoke from tools/bin/stress Usage ----- From 726f6827dfd2059a793ec433653b2fe2ddc74266 Mon Sep 17 00:00:00 2001 From: Jonathan Ellis Date: Wed, 18 Apr 2012 13:23:17 -0500 Subject: [PATCH 8/8] add time remaining estimate to nodetool compactionstats patch by Fabien Rousseau; reviewed by jbellis for CASSANDRA-4167 --- CHANGES.txt | 1 + src/java/org/apache/cassandra/tools/NodeCmd.java | 13 +++++++++++++ src/java/org/apache/cassandra/tools/NodeProbe.java | 5 +++++ 3 files changed, 19 insertions(+) diff --git a/CHANGES.txt b/CHANGES.txt index 3644c337257a..b8de41f5185c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -5,6 +5,7 @@ Merged from 1.0: * avoid streaming empty files with bulk loader if sstablewriter errors out (CASSANDRA-3946) * fix stress build (CASSANDRA-4140) + * add time remaining estimate to nodetool compactionstats (CASSANDRA-4167) 1.1-rc1 diff --git a/src/java/org/apache/cassandra/tools/NodeCmd.java b/src/java/org/apache/cassandra/tools/NodeCmd.java index 8540debd10c5..afebfcd417e2 100644 --- a/src/java/org/apache/cassandra/tools/NodeCmd.java +++ b/src/java/org/apache/cassandra/tools/NodeCmd.java @@ -38,6 +38,7 @@ import org.apache.cassandra.config.ConfigurationException; import org.apache.cassandra.db.ColumnFamilyStoreMBean; import org.apache.cassandra.db.compaction.CompactionManagerMBean; +import org.apache.cassandra.db.compaction.OperationType; import org.apache.cassandra.net.MessagingServiceMBean; import org.apache.cassandra.thrift.InvalidRequestException; import org.apache.cassandra.utils.EstimatedHistogram; @@ -446,17 +447,29 @@ public void printNetworkStats(final InetAddress addr, PrintStream outs) public void printCompactionStats(PrintStream outs) { + int compactionThroughput = probe.getCompactionThroughput(); CompactionManagerMBean cm = probe.getCompactionManagerProxy(); outs.println("pending tasks: " + cm.getPendingTasks()); if (cm.getCompactions().size() > 0) outs.printf("%25s%16s%16s%16s%16s%10s%n", "compaction type", "keyspace", "column family", "bytes compacted", "bytes total", "progress"); + long remainingBytes = 0; for (Map c : cm.getCompactions()) { String percentComplete = new Long(c.get("totalBytes")) == 0 ? "n/a" : new DecimalFormat("0.00").format((double) new Long(c.get("bytesComplete")) / new Long(c.get("totalBytes")) * 100) + "%"; outs.printf("%25s%16s%16s%16s%16s%10s%n", c.get("taskType"), c.get("keyspace"), c.get("columnfamily"), c.get("bytesComplete"), c.get("totalBytes"), percentComplete); + if (c.get("taskType").equals(OperationType.COMPACTION.toString())) + remainingBytes += (new Long(c.get("totalBytes")) - new Long(c.get("bytesComplete"))); } + long remainingTimeInSecs = compactionThroughput == 0 || remainingBytes == 0 + ? -1 + : (remainingBytes) / (long) (1024L * 1024L * compactionThroughput); + String remainingTime = remainingTimeInSecs < 0 + ? "n/a" + : String.format("%dh%02dm%02ds", remainingTimeInSecs / 3600, (remainingTimeInSecs % 3600) / 60, (remainingTimeInSecs % 60)); + + outs.printf("%25s%10s%n", "Active compaction remaining time : ", remainingTime); } public void printColumnFamilyStats(PrintStream outs) diff --git a/src/java/org/apache/cassandra/tools/NodeProbe.java b/src/java/org/apache/cassandra/tools/NodeProbe.java index cea2fc6001ca..2ae6050fc30a 100644 --- a/src/java/org/apache/cassandra/tools/NodeProbe.java +++ b/src/java/org/apache/cassandra/tools/NodeProbe.java @@ -613,6 +613,11 @@ public void setCompactionThroughput(int value) ssProxy.setCompactionThroughputMbPerSec(value); } + public int getCompactionThroughput() + { + return ssProxy.getCompactionThroughputMbPerSec(); + } + public int getExceptionCount() { return ssProxy.getExceptionCount();