You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by xe...@apache.org on 2012/05/03 02:53:26 UTC

[3/3] git commit: stress tool to return appropriate exit code on failure patch by Tyler Patterson; reviewed by Pavel Yaskevich for CASSANDRA-4188

stress tool to return appropriate exit code on failure
patch by Tyler Patterson; reviewed by Pavel Yaskevich for CASSANDRA-4188


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

Branch: refs/heads/trunk
Commit: f20badb685393e60f74b236edf623c7c9264f1eb
Parents: 48a2269
Author: Pavel Yaskevich <xe...@apache.org>
Authored: Thu May 3 03:29:34 2012 +0300
Committer: Pavel Yaskevich <xe...@apache.org>
Committed: Thu May 3 03:34:58 2012 +0300

----------------------------------------------------------------------
 CHANGES.txt                                        |    1 +
 .../src/org/apache/cassandra/stress/Stress.java    |    7 ++-
 .../org/apache/cassandra/stress/StressAction.java  |   34 ++++++++++++++-
 3 files changed, 38 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cassandra/blob/f20badb6/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index bd508c6..ad301db 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -11,6 +11,7 @@
  * Avoids possible deadlock during bootstrap (CASSANDRA-4159)
  * fix stress tool that hangs forever on timeout or error (CASSANDRA-4128)
  * Fix super columns bug where cache is not updated (CASSANDRA-4190)
+ * stress tool to return appropriate exit code on failure (CASSANDRA-4188)
 
 
 1.0.9

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f20badb6/tools/stress/src/org/apache/cassandra/stress/Stress.java
----------------------------------------------------------------------
diff --git a/tools/stress/src/org/apache/cassandra/stress/Stress.java b/tools/stress/src/org/apache/cassandra/stress/Stress.java
index c5e65f8..b490d69 100644
--- a/tools/stress/src/org/apache/cassandra/stress/Stress.java
+++ b/tools/stress/src/org/apache/cassandra/stress/Stress.java
@@ -66,7 +66,7 @@ public final class Stress
             {
                 while (!socket.isClosed() && (line = inp.readLine()) != null)
                 {
-                    if (line.equals("END"))
+                    if (line.equals("END") || line.equals("FAILURE"))
                     {
                         out.writeInt(1);
                         break;
@@ -88,7 +88,10 @@ public final class Stress
         }
         else
         {
-            new StressAction(session, outStream).start();
+            StressAction stressAction = new StressAction(session, outStream);
+            stressAction.start();
+            stressAction.join();
+            System.exit(stressAction.getReturnCode());
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cassandra/blob/f20badb6/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 f0a9f49..d043b66 100644
--- a/tools/stress/src/org/apache/cassandra/stress/StressAction.java
+++ b/tools/stress/src/org/apache/cassandra/stress/StressAction.java
@@ -37,6 +37,11 @@ public class StressAction extends Thread
 
     private volatile boolean stop = false;
 
+    public static final int SUCCESS = 0;
+    public static final int FAILURE = 1;
+
+    private volatile int returnCode = -1;
+
     public StressAction(Session session, PrintStream out)
     {
         client = session;
@@ -137,11 +142,28 @@ public class StressAction extends Thread
             }
         }
 
+        // if any consumer failed, set the return code to failure.
+        returnCode = SUCCESS;
         if (producer.isAlive())
+        {
             producer.interrupt(); // if producer is still alive it means that we had errors in the consumers
+            returnCode = FAILURE;
+        }
+        for (Consumer consumer : consumers)
+            if (consumer.getReturnCode() == FAILURE)
+                returnCode = FAILURE;
+
+        if (returnCode == SUCCESS)
+            // marking an end of the output to the client
+            output.println("END");
+        else
+            output.println("FAILURE");
 
-        // marking an end of the output to the client
-        output.println("END");
+    }
+
+    public int getReturnCode()
+    {
+        return returnCode;
     }
 
     /**
@@ -184,6 +206,7 @@ public class StressAction extends Thread
     {
         private final int items;
         private volatile boolean stop = false;
+        private volatile int returnCode = StressAction.SUCCESS;
 
         public Consumer(int toConsume)
         {
@@ -208,11 +231,13 @@ public class StressAction extends Thread
                     if (output == null)
                     {
                         System.err.println(e.getMessage());
+                        returnCode = StressAction.FAILURE;
                         System.exit(-1);
                     }
 
 
                     output.println(e.getMessage());
+                    returnCode = StressAction.FAILURE;
                     break;
                 }
             }
@@ -222,6 +247,11 @@ public class StressAction extends Thread
         {
             stop = true;
         }
+
+        public int getReturnCode()
+        {
+            return returnCode;
+        }
     }
 
     private Operation createOperation(int index)