tool: Correctly print timed out event scripts output
authorAmitay Isaacs <amitay@gmail.com>
Mon, 20 Jul 2015 06:37:58 +0000 (16:37 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Fri, 31 Jul 2015 03:35:01 +0000 (13:35 +1000)
The timed out error is ignored for certain events (start_recovery,
recoverd, takeip, releaseip).  If these events time out, then the debug
hung script outputs the following:

 3 scripts were executed last releaseip cycle
 00.ctdb              Status:OK    Duration:4.381 Thu Jul 16 23:45:24 2015
 01.reclock           Status:OK    Duration:13.422 Thu Jul 16 23:45:28 2015
 10.external          Status:DISABLED
 10.interface         Status:OK    Duration:-1437083142.208 Thu Jul 16 23:45:42 2015

The endtime for timed out scripts is not set.  Since the status is not
returned as -ETIME for some events, ctdb scriptstatus prints -ve duration.

Signed-off-by: Amitay Isaacs <amitay@gmail.com>
Reviewed-by: Martin Schwenke <martin@meltin.net>
(Imported from commit 71b89b2b7a9768de437347e6678370b2682da892)

tools/ctdb.c

index ebbe84e70c4d2252db6819e79a6b322010d117f2..7979657d60db376b116a8301f596a705ac4acf09 100644 (file)
@@ -1453,6 +1453,14 @@ static int control_one_scriptstatus(struct ctdb_context *ctdb,
        for (i=0; i<script_status->num_scripts; i++) {
                const char *status = NULL;
 
+               /* The ETIME status is ignored for certain events.
+                * In that case the status is 0, but endtime is not set.
+                */
+               if (script_status->scripts[i].status == 0 &&
+                   timeval_is_zero(&script_status->scripts[i].finished)) {
+                       script_status->scripts[i].status = -ETIME;
+               }
+
                switch (script_status->scripts[i].status) {
                case -ETIME:
                        status = "TIMEDOUT";