add ctdb_disable/enable_monitoring() that only modifies the monitoring
authorRonnie Sahlberg <sahlberg@ronnie>
Thu, 29 Nov 2007 23:09:54 +0000 (10:09 +1100)
committerRonnie Sahlberg <sahlberg@ronnie>
Thu, 29 Nov 2007 23:09:54 +0000 (10:09 +1100)
flag.
change calling of the recovered/takeip/releaseip event scripts to use
these enable/disable functions instead of stopping/starting monitoring.

when we disable monitoring we want all events to still be running
in particular the events to monitor for dead nodes  and we only want to
supress running the monitor event scripts

include/ctdb_private.h
server/ctdb_monitor.c
server/ctdb_recover.c
server/ctdb_takeover.c

index dbe4f7468987e35e5d2011f948bef6914ee57c47..7f5ff2d1b208bd6d1eb0796e5b73b00df43faff6 100644 (file)
@@ -1045,6 +1045,8 @@ void ctdb_stop_recoverd(struct ctdb_context *ctdb);
 
 uint32_t ctdb_get_num_active_nodes(struct ctdb_context *ctdb);
 
+void ctdb_disable_monitoring(struct ctdb_context *ctdb);
+void ctdb_enable_monitoring(struct ctdb_context *ctdb);
 void ctdb_stop_monitoring(struct ctdb_context *ctdb);
 void ctdb_start_monitoring(struct ctdb_context *ctdb);
 void ctdb_start_tcp_tickle_update(struct ctdb_context *ctdb);
index ce172fa3452876b16ce6b3874be6c63fadded6a4..7053451ea40757618896c636f6e10919ad093074 100644 (file)
@@ -212,7 +212,28 @@ static void ctdb_check_health(struct event_context *ev, struct timed_event *te,
        }       
 }
 
-/* stop any monitoring */
+/* 
+  (Temporaily) Disabling monitoring will stop the monitor event scripts
+  from running   but node health checks will still occur
+*/
+void ctdb_disable_monitoring(struct ctdb_context *ctdb)
+{
+       ctdb->monitoring_mode  = CTDB_MONITORING_DISABLED;
+       DEBUG(0,("Monitoring has been stopped\n"));
+}
+
+/* 
+   Re-enable running monitor events after they have been disabled
+ */
+void ctdb_enable_monitoring(struct ctdb_context *ctdb)
+{
+       ctdb->monitoring_mode  = CTDB_MONITORING_ACTIVE;
+       DEBUG(0,("Monitoring has been enabled\n"));
+}
+
+/* stop any monitoring 
+   this should only be done when shutting down the daemon
+*/
 void ctdb_stop_monitoring(struct ctdb_context *ctdb)
 {
        talloc_free(ctdb->monitor_context);
index 89e6d3893aff765a3e76be273fe092fcf175d119..1c9f6a91bdf81bfd96259bd58c0e6aafc00345a0 100644 (file)
@@ -482,7 +482,7 @@ static void set_recmode_handler(struct event_context *ev, struct fd_event *fde,
        }
 
 
-       ctdb_stop_monitoring(state->ctdb);
+       ctdb_disable_monitoring(state->ctdb);
 
        /* call the events script to tell all subsystems that we have recovered */
        ret = ctdb_event_script_callback(state->ctdb, 
@@ -491,7 +491,7 @@ static void set_recmode_handler(struct event_context *ev, struct fd_event *fde,
                                         ctdb_recovered_callback, 
                                         state, "recovered");
 
-       ctdb_start_monitoring(state->ctdb);
+       ctdb_enable_monitoring(state->ctdb);
 
        if (ret != 0) {
                ctdb_request_control_reply(state->ctdb, state->c, NULL, -1, "failed to run eventscript from set_recmode");
index cd9c385dfb82f47c452055fdaac54a6def440675..90d692e355aa1b361898b54c6463a24d654b1249 100644 (file)
@@ -236,7 +236,7 @@ int32_t ctdb_control_takeover_ip(struct ctdb_context *ctdb,
                 inet_ntoa(pip->sin.sin_addr), vnn->public_netmask_bits, 
                 vnn->iface));
 
-       ctdb_stop_monitoring(ctdb);
+       ctdb_disable_monitoring(ctdb);
 
        ret = ctdb_event_script_callback(ctdb, 
                                         timeval_current_ofs(ctdb->tunable.script_timeout, 0),
@@ -245,7 +245,7 @@ int32_t ctdb_control_takeover_ip(struct ctdb_context *ctdb,
                                         vnn->iface, 
                                         inet_ntoa(pip->sin.sin_addr),
                                         vnn->public_netmask_bits);
-       ctdb_start_monitoring(ctdb);
+       ctdb_enable_monitoring(ctdb);
 
        if (ret != 0) {
                DEBUG(0,(__location__ " Failed to takeover IP %s on interface %s\n",
@@ -362,7 +362,7 @@ int32_t ctdb_control_release_ip(struct ctdb_context *ctdb,
 
        state->vnn = vnn;
 
-       ctdb_stop_monitoring(ctdb);
+       ctdb_disable_monitoring(ctdb);
 
        ret = ctdb_event_script_callback(ctdb, 
                                         timeval_current_ofs(ctdb->tunable.script_timeout, 0),
@@ -371,7 +371,7 @@ int32_t ctdb_control_release_ip(struct ctdb_context *ctdb,
                                         vnn->iface, 
                                         inet_ntoa(pip->sin.sin_addr),
                                         vnn->public_netmask_bits);
-       ctdb_start_monitoring(ctdb);
+       ctdb_enable_monitoring(ctdb);
 
        if (ret != 0) {
                DEBUG(0,(__location__ " Failed to release IP %s on interface %s\n",