summaryrefslogtreecommitdiffstats
path: root/ctdb/server/eventscript.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronniesahlberg@gmail.com>2011-11-17 13:34:29 +1100
committerRonnie Sahlberg <ronniesahlberg@gmail.com>2011-11-18 12:22:22 +1100
commit0581fd85e6f8ac84d0249920acbb295d9d111bf6 (patch)
treee6d0a7595237154d5b5ed63dbff4a5cf89c6ade2 /ctdb/server/eventscript.c
parent44de394796b8b4f1b046ccf226372cd8ba9ad768 (diff)
downloadsamba-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.c10
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;