Repository: cassandra
Updated Branches:
  refs/heads/cassandra-2.1 5fb32ba0c -> 530c9f52c
  refs/heads/trunk e7752549d -> 51a6f0f7f


cassandra-stress: merge 7468 into 2.1, and ninja-fix duration setting for user 
command


Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo
Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/530c9f52
Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/530c9f52
Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/530c9f52

Branch: refs/heads/cassandra-2.1
Commit: 530c9f52c341fccfc8744307c359566697e54a0a
Parents: 5fb32ba
Author: Benedict Elliott Smith <bened...@apache.org>
Authored: Thu Sep 11 11:27:34 2014 +0700
Committer: Benedict Elliott Smith <bened...@apache.org>
Committed: Thu Sep 11 11:27:34 2014 +0700

----------------------------------------------------------------------
 .../apache/cassandra/stress/StressAction.java   | 22 ++++--
 .../apache/cassandra/stress/StressProfile.java  |  2 +-
 .../operations/predefined/ThriftInserter.java   |  4 +-
 .../stress/settings/SettingsColumn.java         |  7 +-
 .../stress/settings/SettingsCommand.java        | 76 +++++++++++++++++++-
 .../settings/SettingsCommandPreDefined.java     |  6 +-
 .../SettingsCommandPreDefinedMixed.java         |  6 +-
 .../stress/settings/SettingsCommandUser.java    |  5 +-
 8 files changed, 109 insertions(+), 19 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/StressAction.java
----------------------------------------------------------------------
diff --git a/tools/stress/src/org/apache/cassandra/stress/StressAction.java 
b/tools/stress/src/org/apache/cassandra/stress/StressAction.java
index e58bfa1..f697dd9 100644
--- a/tools/stress/src/org/apache/cassandra/stress/StressAction.java
+++ b/tools/stress/src/org/apache/cassandra/stress/StressAction.java
@@ -67,7 +67,8 @@ public class StressAction implements Runnable
         if (settings.rate.auto)
             success = runAuto();
         else
-            success = null != run(settings.command.getFactory(settings), 
settings.rate.threadCount, settings.command.count, output);
+            success = null != run(settings.command.getFactory(settings), 
settings.rate.threadCount, settings.command.count,
+                                  settings.command.duration, 
settings.command.durationUnits, output);
 
         if (success)
             output.println("END");
@@ -88,7 +89,7 @@ public class StressAction implements Runnable
             // we need to warm up all the nodes in the cluster ideally, but we 
may not be the only stress instance;
             // so warm up all the nodes we're speaking to only.
             output.println(String.format("Warming up %s with %d 
iterations...", single.desc(), iterations));
-            run(single, 20, iterations, warmupOutput);
+            run(single, 20, iterations, 0, null, warmupOutput);
         }
     }
 
@@ -104,7 +105,8 @@ public class StressAction implements Runnable
         {
             output.println(String.format("Running with %d threadCount", 
threadCount));
 
-            StressMetrics result = run(settings.command.getFactory(settings), 
threadCount, settings.command.count, output);
+            StressMetrics result = run(settings.command.getFactory(settings), 
threadCount, settings.command.count,
+                                       settings.command.duration, 
settings.command.durationUnits, output);
             if (result == null)
                 return false;
             results.add(result);
@@ -161,13 +163,14 @@ public class StressAction implements Runnable
         return improvement / count;
     }
 
-    private StressMetrics run(OpDistributionFactory operations, int 
threadCount, long opCount, PrintStream output)
+    private StressMetrics run(OpDistributionFactory operations, int 
threadCount, long opCount, long duration, TimeUnit durationUnits, PrintStream 
output)
     {
-
         output.println(String.format("Running %s with %d threads %s",
                                      operations.desc(),
                                      threadCount,
-                                     opCount > 0 ? " for " + opCount + " 
iterations" : "until stderr of mean < " + settings.command.targetUncertainty));
+                                     durationUnits != null ? duration + " " + 
durationUnits.toString().toLowerCase()
+                                        : opCount > 0      ? "for " + opCount 
+ " iteration"
+                                                           : "until stderr of 
mean < " + settings.command.targetUncertainty));
         final WorkManager workManager;
         if (opCount < 0)
             workManager = new ContinuousWorkManager();
@@ -192,7 +195,12 @@ public class StressAction implements Runnable
 
         metrics.start();
 
-        if (opCount <= 0)
+        if (durationUnits != null)
+        {
+            Uninterruptibles.sleepUninterruptibly(duration, durationUnits);
+            workManager.stop();
+        }
+        else if (opCount <= 0)
         {
             try
             {

http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/StressProfile.java
----------------------------------------------------------------------
diff --git a/tools/stress/src/org/apache/cassandra/stress/StressProfile.java 
b/tools/stress/src/org/apache/cassandra/stress/StressProfile.java
index de561f3..bd873e8 100644
--- a/tools/stress/src/org/apache/cassandra/stress/StressProfile.java
+++ b/tools/stress/src/org/apache/cassandra/stress/StressProfile.java
@@ -535,7 +535,7 @@ public class StressProfile implements Serializable
         while (iter.hasNext())
         {
             Map.Entry<String, V> e = iter.next();
-            if (!e.getKey().toLowerCase().equalsIgnoreCase(e.getKey()))
+            if (!e.getKey().equalsIgnoreCase(e.getKey()))
             {
                 reinsert.add(e);
                 iter.remove();

http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/operations/predefined/ThriftInserter.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/operations/predefined/ThriftInserter.java
 
b/tools/stress/src/org/apache/cassandra/stress/operations/predefined/ThriftInserter.java
index 2500c2e..d6adbf9 100644
--- 
a/tools/stress/src/org/apache/cassandra/stress/operations/predefined/ThriftInserter.java
+++ 
b/tools/stress/src/org/apache/cassandra/stress/operations/predefined/ThriftInserter.java
@@ -94,7 +94,9 @@ public final class ThriftInserter extends PredefinedOperation
         for (int i = 0 ; i < values.size() ; i++)
             columns.add(new Column(names.get(i))
                         .setValue(values.get(i))
-                        .setTimestamp(FBUtilities.timestampMicros()));
+                        .setTimestamp(settings.columns.timestamp != null
+                                      ? 
Long.parseLong(settings.columns.timestamp)
+                                      : FBUtilities.timestampMicros()));
         return columns;
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/settings/SettingsColumn.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsColumn.java 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsColumn.java
index 4b4e0b0..ecdef29 100644
--- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsColumn.java
+++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsColumn.java
@@ -47,6 +47,7 @@ public class SettingsColumn implements Serializable
     public transient List<ByteBuffer> names;
     public final List<String> namestrs;
     public final String comparator;
+    public final String timestamp;
     public final boolean variableColumnCount;
     public final boolean slice;
     public final DistributionFactory sizeDistribution;
@@ -64,6 +65,7 @@ public class SettingsColumn implements Serializable
     {
         sizeDistribution = options.size.get();
         {
+            timestamp = options.timestamp.value();
             comparator = options.comparator.value();
             AbstractType parsed = null;
 
@@ -148,6 +150,7 @@ public class SettingsColumn implements Serializable
         final OptionSimple superColumns = new OptionSimple("super=", "[0-9]+", 
"0", "Number of super columns to use (no super columns used if not specified)", 
false);
         final OptionSimple comparator = new OptionSimple("comparator=", 
"TimeUUIDType|AsciiType|UTF8Type", "AsciiType", "Column Comparator to use", 
false);
         final OptionSimple slice = new OptionSimple("slice", "", null, "If 
set, range slices will be used for reads, otherwise a names query will be", 
false);
+        final OptionSimple timestamp = new OptionSimple("timestamp=", 
"[0-9]+", null, "If set, all columns will be written with the given timestamp", 
false);
         final OptionDistribution size = new OptionDistribution("size=", 
"FIXED(34)", "Cell size distribution");
     }
 
@@ -158,7 +161,7 @@ public class SettingsColumn implements Serializable
         @Override
         public List<? extends Option> options()
         {
-            return Arrays.asList(name, slice, superColumns, comparator, size);
+            return Arrays.asList(name, slice, superColumns, comparator, 
timestamp, size);
         }
     }
 
@@ -169,7 +172,7 @@ public class SettingsColumn implements Serializable
         @Override
         public List<? extends Option> options()
         {
-            return Arrays.asList(count, slice, superColumns, comparator, size);
+            return Arrays.asList(count, slice, superColumns, comparator, 
timestamp, size);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommand.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommand.java 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommand.java
index 59accb9..a1c89e1 100644
--- a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommand.java
+++ b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommand.java
@@ -25,6 +25,7 @@ import java.io.Serializable;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.TimeUnit;
 
 import org.apache.cassandra.stress.generate.SeedManager;
 import org.apache.cassandra.stress.operations.OpDistributionFactory;
@@ -36,6 +37,8 @@ public abstract class SettingsCommand implements Serializable
 
     public final Command type;
     public final long count;
+    public final long duration;
+    public final TimeUnit durationUnits;
     public final boolean noWarmup;
     public final ConsistencyLevel consistencyLevel;
     public final double targetUncertainty;
@@ -48,11 +51,12 @@ public abstract class SettingsCommand implements 
Serializable
     {
         this(type, (Options) options,
                 options instanceof Count ? (Count) options : null,
+                options instanceof Duration ? (Duration) options : null,
                 options instanceof Uncertainty ? (Uncertainty) options : null
         );
     }
 
-    public SettingsCommand(Command type, Options options, Count count, 
Uncertainty uncertainty)
+    public SettingsCommand(Command type, Options options, Count count, 
Duration duration, Uncertainty uncertainty)
     {
         this.type = type;
         this.consistencyLevel = 
ConsistencyLevel.valueOf(options.consistencyLevel.value().toUpperCase());
@@ -60,6 +64,30 @@ public abstract class SettingsCommand implements Serializable
         if (count != null)
         {
             this.count = Long.parseLong(count.count.value());
+            this.duration = 0;
+            this.durationUnits = null;
+            this.targetUncertainty = -1;
+            this.minimumUncertaintyMeasurements = -1;
+            this.maximumUncertaintyMeasurements = -1;
+        }
+        else if (duration != null)
+        {
+            this.count = -1;
+            this.duration = 
Long.parseLong(duration.duration.value().substring(0, 
duration.duration.value().length() - 1));
+            switch 
(duration.duration.value().toLowerCase().charAt(duration.duration.value().length()
 - 1))
+            {
+                case 's':
+                    this.durationUnits = TimeUnit.SECONDS;
+                    break;
+                case 'm':
+                    this.durationUnits = TimeUnit.MINUTES;
+                    break;
+                case 'h':
+                    this.durationUnits = TimeUnit.HOURS;
+                    break;
+                default:
+                    throw new IllegalStateException();
+            }
             this.targetUncertainty = -1;
             this.minimumUncertaintyMeasurements = -1;
             this.maximumUncertaintyMeasurements = -1;
@@ -67,6 +95,8 @@ public abstract class SettingsCommand implements Serializable
         else
         {
             this.count = -1;
+            this.duration = 0;
+            this.durationUnits = null;
             this.targetUncertainty = 
Double.parseDouble(uncertainty.uncertainty.value());
             this.minimumUncertaintyMeasurements = 
Integer.parseInt(uncertainty.minMeasurements.value());
             this.maximumUncertaintyMeasurements = 
Integer.parseInt(uncertainty.maxMeasurements.value());
@@ -91,6 +121,16 @@ public abstract class SettingsCommand implements 
Serializable
         }
     }
 
+    static class Duration extends Options
+    {
+        final OptionSimple duration = new OptionSimple("duration=", 
"[0-9]+[smh]", null, "Time to run in (in seconds, minutes or hours)", true);
+        @Override
+        public List<? extends Option> options()
+        {
+            return Arrays.asList(duration, noWarmup, consistencyLevel);
+        }
+    }
+
     static class Uncertainty extends Options
     {
         final OptionSimple uncertainty = new OptionSimple("err<", 
"0\\.[0-9]+", "0.02", "Run until the standard error of the mean is below this 
fraction", false);
@@ -132,5 +172,37 @@ public abstract class SettingsCommand implements 
Serializable
         return null;
     }
 
-}
+/*    static SettingsCommand build(Command type, String[] params)
+    {
+        GroupedOptions options = GroupedOptions.select(params, new Count(), 
new Duration(), new Uncertainty());
+        if (options == null)
+        {
+            printHelp(type);
+            System.out.println("Invalid " + type + " options provided, see 
output for valid options");
+            System.exit(1);
+        }
+        return new SettingsCommand(type, options);
+    }*/
+
+    static void printHelp(Command type)
+    {
+        printHelp(type.toString().toLowerCase());
+    }
 
+    static void printHelp(String type)
+    {
+        GroupedOptions.printOptions(System.out, type.toLowerCase(), new 
Uncertainty(), new Count(), new Duration());
+    }
+
+    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/530c9f52/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefined.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefined.java
 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefined.java
index 5a8b604..ab60dd1 100644
--- 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefined.java
+++ 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefined.java
@@ -36,6 +36,7 @@ import 
org.apache.cassandra.stress.operations.FixedOpDistribution;
 import org.apache.cassandra.stress.operations.OpDistribution;
 import org.apache.cassandra.stress.operations.OpDistributionFactory;
 import org.apache.cassandra.stress.operations.predefined.PredefinedOperation;
+import 
org.apache.cassandra.stress.settings.SettingsCommandPreDefinedMixed.Options;
 import org.apache.cassandra.stress.util.Timer;
 
 // Settings unique to the mixed command type
@@ -116,7 +117,8 @@ public class SettingsCommandPreDefined extends 
SettingsCommand
     {
         GroupedOptions options = GroupedOptions.select(params,
                 new Options(new Uncertainty()),
-                new Options(new Count()));
+                new Options(new Count()),
+                new Options(new Duration()));
         if (options == null)
         {
             printHelp(type);
@@ -133,7 +135,7 @@ public class SettingsCommandPreDefined extends 
SettingsCommand
 
     static void printHelp(String type)
     {
-        GroupedOptions.printOptions(System.out, type.toLowerCase(), new 
Uncertainty(), new Count());
+        GroupedOptions.printOptions(System.out, type.toLowerCase(), new 
Uncertainty(), new Count(), new Duration());
     }
 
     static Runnable helpPrinter(final Command type)

http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefinedMixed.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefinedMixed.java
 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefinedMixed.java
index f383ed9..dc45b89 100644
--- 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefinedMixed.java
+++ 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandPreDefinedMixed.java
@@ -123,7 +123,8 @@ public class SettingsCommandPreDefinedMixed extends 
SettingsCommandPreDefined
     {
         GroupedOptions options = GroupedOptions.select(params,
                 new Options(new SettingsCommand.Uncertainty()),
-                new Options(new SettingsCommand.Count()));
+                new Options(new SettingsCommand.Count()),
+                new Options(new SettingsCommand.Duration()));
         if (options == null)
         {
             printHelp();
@@ -137,7 +138,8 @@ public class SettingsCommandPreDefinedMixed extends 
SettingsCommandPreDefined
     {
         GroupedOptions.printOptions(System.out, "mixed",
                                     new Options(new 
SettingsCommand.Uncertainty()),
-                                    new Options(new SettingsCommand.Count()));
+                                    new Options(new SettingsCommand.Count()),
+                                    new Options(new 
SettingsCommand.Duration()));
     }
 
     public static Runnable helpPrinter()

http://git-wip-us.apache.org/repos/asf/cassandra/blob/530c9f52/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandUser.java
----------------------------------------------------------------------
diff --git 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandUser.java
 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandUser.java
index d0e32b2..2e30d62 100644
--- 
a/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandUser.java
+++ 
b/tools/stress/src/org/apache/cassandra/stress/settings/SettingsCommandUser.java
@@ -96,7 +96,6 @@ public class SettingsCommandUser extends SettingsCommand
         {
             return ImmutableList.<Option>builder().add(ops, clustering, 
profile).addAll(parent.options()).build();
         }
-
     }
 
     // CLI utility methods
@@ -105,6 +104,7 @@ public class SettingsCommandUser extends SettingsCommand
     {
         GroupedOptions options = GroupedOptions.select(params,
                 new Options(new Uncertainty()),
+                new Options(new Duration()),
                 new Options(new Count()));
         if (options == null)
         {
@@ -119,7 +119,8 @@ public class SettingsCommandUser extends SettingsCommand
     {
         GroupedOptions.printOptions(System.out, "user",
                                     new Options(new Uncertainty()),
-                                    new Options(new Count()));
+                                    new Options(new Count()),
+                                    new Options(new Duration()));
     }
 
     public static Runnable helpPrinter()

Reply via email to