ctdb-tool: Correctly print timed out event scripts output
authorAmitay Isaacs <amitay@gmail.com>
Mon, 20 Jul 2015 06:37:58 +0000 (16:37 +1000)
committerMartin Schwenke <martins@samba.org>
Wed, 22 Jul 2015 09:56:24 +0000 (11:56 +0200)
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>
ctdb/tools/ctdb.c

index 4734b26caff4d6b98277a802c5215bb203afdc84..c6da621602031f31e25db4ebf9bc2b65ae938528 100644 (file)
@@ -1424,6 +1424,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";