diff options
author | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2011-11-17 13:34:29 +1100 |
---|---|---|
committer | Ronnie Sahlberg <ronniesahlberg@gmail.com> | 2011-11-18 12:22:22 +1100 |
commit | 0581fd85e6f8ac84d0249920acbb295d9d111bf6 (patch) | |
tree | e6d0a7595237154d5b5ed63dbff4a5cf89c6ade2 /ctdb/server/eventscript.c | |
parent | 44de394796b8b4f1b046ccf226372cd8ba9ad768 (diff) | |
download | samba-0581fd85e6f8ac84d0249920acbb295d9d111bf6.tar.gz samba-0581fd85e6f8ac84d0249920acbb295d9d111bf6.tar.xz samba-0581fd85e6f8ac84d0249920acbb295d9d111bf6.zip |
Eventscripts: Add special -ECANCELED status for monitor events that are cancelled
When a monitor event is canceled by a higher priority script, make sure we return
status -ECANCELED to the callback in ctdB_monitor.c
Also treat -ECANCELED as a simple "try monitor event again" and skip modifying any HEALTHY/UNHEALTHY flags when this happens
(This used to be ctdb commit a15ec57c26d1bc82af85f74eebae0bd8abde3233)
Diffstat (limited to 'ctdb/server/eventscript.c')
-rw-r--r-- | ctdb/server/eventscript.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ctdb/server/eventscript.c b/ctdb/server/eventscript.c index c01fbad69e..722ebec6a9 100644 --- a/ctdb/server/eventscript.c +++ b/ctdb/server/eventscript.c @@ -58,7 +58,7 @@ struct ctdb_event_script_state { enum ctdb_eventscript_call call; const char *options; struct timeval timeout; - + unsigned int current; struct ctdb_scripts_wire *scripts; }; @@ -742,6 +742,14 @@ static int ctdb_event_script_callback_v(struct ctdb_context *ctdb, /* Kill off any running monitor events to run this event. */ if (ctdb->current_monitor) { + struct ctdb_event_script_state *ms = talloc_get_type(ctdb->current_monitor, struct ctdb_event_script_state); + + /* cancel it */ + if (ms->callback != NULL) { + ms->callback->fn(ctdb, -ECANCELED, ms->callback->private_data); + talloc_free(ms->callback); + } + /* Discard script status so we don't save to last_status */ talloc_free(ctdb->current_monitor->scripts); ctdb->current_monitor->scripts = NULL; |