ctdbd: Refactor shutdown sequence
authorMartin Schwenke <martin@meltin.net>
Wed, 19 Jun 2013 00:58:14 +0000 (10:58 +1000)
committerAmitay Isaacs <amitay@gmail.com>
Sat, 22 Jun 2013 05:51:02 +0000 (15:51 +1000)
Signed-off-by: Martin Schwenke <martin@meltin.net>
include/ctdb_private.h
server/ctdb_control.c
server/ctdb_daemon.c
server/ctdb_monitor.c

index eadd9637155e7f4166b7e58c60bf2394d486e516..bf5b5ecacc555a6a7356aceac5ab1bd07243ce49 100644 (file)
@@ -450,6 +450,8 @@ const char *runstate_to_string(enum ctdb_runstate runstate);
 enum ctdb_runstate runstate_from_string(const char *label);
 void ctdb_set_runstate(struct ctdb_context *ctdb, enum ctdb_runstate runstate);
 
+void ctdb_shutdown_sequence(struct ctdb_context *ctdb, int exit_code);
+
 #define CTDB_MONITORING_ACTIVE         0
 #define CTDB_MONITORING_DISABLED       1
 
index 229ccddb08df63b0fc78666325a74da17fa3369b..0f2e600b946c3d93a49ba0cc88bebaff3807e3b1 100644 (file)
@@ -331,17 +331,8 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb,
                return 0;
 
        case CTDB_CONTROL_SHUTDOWN:
-               DEBUG(DEBUG_NOTICE,("Received SHUTDOWN command. Stopping CTDB daemon.\n"));
-               ctdb_set_runstate(ctdb, CTDB_RUNSTATE_SHUTDOWN);
-               ctdb_stop_recoverd(ctdb);
-               ctdb_stop_keepalive(ctdb);
-               ctdb_stop_monitoring(ctdb);
-               ctdb_release_all_ips(ctdb);
-               ctdb_event_script(ctdb, CTDB_EVENT_SHUTDOWN);
-               if (ctdb->methods != NULL) {
-                       ctdb->methods->shutdown(ctdb);
-               }
-               exit(0);
+               DEBUG(DEBUG_NOTICE,("Received SHUTDOWN command.\n"));
+               ctdb_shutdown_sequence(ctdb, 0);
 
        case CTDB_CONTROL_TAKEOVER_IPv4:
                CHECK_CONTROL_DATA_SIZE(sizeof(struct ctdb_public_ipv4));
index b0252556db6e198d47c308c2d56dd6f68d18f74e..3c813ab9b8c79b08eab7fea077ccc8efb39d08d5 100644 (file)
@@ -1725,3 +1725,20 @@ int32_t ctdb_control_process_exists(struct ctdb_context *ctdb, pid_t pid)
 
        return kill(pid, 0);
 }
+
+void ctdb_shutdown_sequence(struct ctdb_context *ctdb, int exit_code)
+{
+       DEBUG(DEBUG_NOTICE,("Shutdown sequence commencing.\n"));
+       ctdb_set_runstate(ctdb, CTDB_RUNSTATE_SHUTDOWN);
+       ctdb_stop_recoverd(ctdb);
+       ctdb_stop_keepalive(ctdb);
+       ctdb_stop_monitoring(ctdb);
+       ctdb_release_all_ips(ctdb);
+       ctdb_event_script(ctdb, CTDB_EVENT_SHUTDOWN);
+       if (ctdb->methods != NULL) {
+               ctdb->methods->shutdown(ctdb);
+       }
+
+       DEBUG(DEBUG_NOTICE,("Shutdown sequence complete, exiting.\n"));
+       exit(exit_code);
+}
index 1608804c3084c46b820d5db422156d273b460ce9..70ca47d64165c91fb0e8e41f0cb44be0fa3c03c7 100644 (file)
@@ -294,16 +294,7 @@ static void ctdb_wait_until_recovered(struct event_context *ev, struct timed_eve
                DEBUG(DEBUG_ALERT,(__location__
                                  "ctdb_recheck_persistent_health() failed (%llu times) - prepare shutdown\n",
                                  (unsigned long long)ctdb->db_persistent_check_errors));
-               ctdb_stop_recoverd(ctdb);
-               ctdb_stop_keepalive(ctdb);
-               ctdb_stop_monitoring(ctdb);
-               ctdb_release_all_ips(ctdb);
-               if (ctdb->methods != NULL) {
-                       ctdb->methods->shutdown(ctdb);
-               }
-               ctdb_event_script(ctdb, CTDB_EVENT_SHUTDOWN);
-               DEBUG(DEBUG_ALERT,("ctdb_recheck_persistent_health() failed - Stopping CTDB daemon\n"));
-               exit(11);
+               ctdb_shutdown_sequence(ctdb, 11);
        }
        ctdb->db_persistent_check_errors = 0;