diff options
author | Martin Schwenke <martin@meltin.net> | 2013-01-10 16:06:25 +1100 |
---|---|---|
committer | Amitay Isaacs <amitay@gmail.com> | 2013-05-24 14:08:06 +1000 |
commit | 63577c96db3877417030f441268b3ec79bb82c2a (patch) | |
tree | daf62bef0535c6bdbc496591b9276bb2b876b04a /ctdb/server | |
parent | c5bcff6724b85bac1a6343f67034b81ebbb7a2c2 (diff) | |
download | samba-63577c96db3877417030f441268b3ec79bb82c2a.tar.gz samba-63577c96db3877417030f441268b3ec79bb82c2a.tar.xz samba-63577c96db3877417030f441268b3ec79bb82c2a.zip |
ctdbd: Replace ctdb->done_startup with ctdb->runstate
This allows states, including startup and shutdown states, to be
clearly tracked. This doesn't include regular runtime "states", which
are handled by node flags.
Introduce new functions ctdb_set_runstate(), runstate_to_string() and
runstate_from_string().
Signed-off-by: Martin Schwenke <martin@meltin.net>
Pair-programmed-with: Amitay Isaacs <amitay@gmail.com>
(This used to be ctdb commit 8076773a9924dcf8aff16f7d96b2b9ac383ecc28)
Diffstat (limited to 'ctdb/server')
-rw-r--r-- | ctdb/server/ctdb_control.c | 1 | ||||
-rw-r--r-- | ctdb/server/ctdb_daemon.c | 5 | ||||
-rw-r--r-- | ctdb/server/ctdb_ltdb_server.c | 10 | ||||
-rw-r--r-- | ctdb/server/ctdb_monitor.c | 9 | ||||
-rw-r--r-- | ctdb/server/ctdb_takeover.c | 2 |
5 files changed, 17 insertions, 10 deletions
diff --git a/ctdb/server/ctdb_control.c b/ctdb/server/ctdb_control.c index 72a602d98d..5e0c27581f 100644 --- a/ctdb/server/ctdb_control.c +++ b/ctdb/server/ctdb_control.c @@ -325,6 +325,7 @@ static int32_t ctdb_control_dispatch(struct ctdb_context *ctdb, 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); diff --git a/ctdb/server/ctdb_daemon.c b/ctdb/server/ctdb_daemon.c index d2df1150a7..bcead6f469 100644 --- a/ctdb/server/ctdb_daemon.c +++ b/ctdb/server/ctdb_daemon.c @@ -1054,6 +1054,8 @@ static void ctdb_setup_event_callback(struct ctdb_context *ctdb, int status, } ctdb_run_notification_script(ctdb, "setup"); + ctdb_set_runstate(ctdb, CTDB_RUNSTATE_STARTUP); + /* tell all other nodes we've just started up */ ctdb_daemon_send_control(ctdb, CTDB_BROADCAST_ALL, 0, CTDB_CONTROL_STARTUP, 0, @@ -1259,6 +1261,7 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork, bool use_syslog, ctdb_fatal(ctdb, "Failed to attach to databases\n"); } + ctdb_set_runstate(ctdb, CTDB_RUNSTATE_INIT); ret = ctdb_event_script(ctdb, CTDB_EVENT_INIT); if (ret != 0) { ctdb_fatal(ctdb, "Failed to run init event\n"); @@ -1284,6 +1287,8 @@ int ctdb_start_daemon(struct ctdb_context *ctdb, bool do_fork, bool use_syslog, /* start the transport going */ ctdb_start_transport(ctdb); + ctdb_set_runstate(ctdb, CTDB_RUNSTATE_SETUP); + ret = ctdb_event_script_callback(ctdb, ctdb, ctdb_setup_event_callback, diff --git a/ctdb/server/ctdb_ltdb_server.c b/ctdb/server/ctdb_ltdb_server.c index 8b06703923..0426d96bdb 100644 --- a/ctdb/server/ctdb_ltdb_server.c +++ b/ctdb/server/ctdb_ltdb_server.c @@ -656,7 +656,7 @@ int32_t ctdb_control_db_set_healthy(struct ctdb_context *ctdb, TDB_DATA indata) return -1; } - if (may_recover && !ctdb->done_startup) { + if (may_recover && ctdb->runstate == CTDB_RUNSTATE_STARTUP) { DEBUG(DEBUG_ERR, (__location__ " db %s become healthy - force recovery for startup\n", ctdb_db->db_name)); ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE; @@ -794,7 +794,7 @@ static int ctdb_local_attach(struct ctdb_context *ctdb, const char *db_name, if (ctdb->max_persistent_check_errors > 0) { remaining_tries = 1; } - if (ctdb->done_startup) { + if (ctdb->runstate == CTDB_RUNSTATE_RUNNING) { remaining_tries = 0; } @@ -1086,9 +1086,9 @@ int32_t ctdb_control_db_attach(struct ctdb_context *ctdb, TDB_DATA indata, return -1; } - if (ctdb->recovery_mode == CTDB_RECOVERY_ACTIVE - && client->pid != ctdb->recoverd_pid - && !ctdb->done_startup) { + if (ctdb->recovery_mode == CTDB_RECOVERY_ACTIVE && + client->pid != ctdb->recoverd_pid && + ctdb->runstate < CTDB_RUNSTATE_RUNNING) { struct ctdb_deferred_attach_context *da_ctx = talloc(client, struct ctdb_deferred_attach_context); if (da_ctx == NULL) { diff --git a/ctdb/server/ctdb_monitor.c b/ctdb/server/ctdb_monitor.c index 984f947a3b..1e556e00d8 100644 --- a/ctdb/server/ctdb_monitor.c +++ b/ctdb/server/ctdb_monitor.c @@ -204,7 +204,7 @@ static void ctdb_startup_callback(struct ctdb_context *ctdb, int status, void *p DEBUG(DEBUG_ERR,("startup event failed\n")); } else if (status == 0) { DEBUG(DEBUG_NOTICE,("startup event OK - enabling monitoring\n")); - ctdb->done_startup = true; + ctdb_set_runstate(ctdb, CTDB_RUNSTATE_RUNNING); ctdb->monitor->next_interval = 2; ctdb_run_notification_script(ctdb, "startup"); } @@ -324,14 +324,15 @@ static void ctdb_check_health(struct event_context *ev, struct timed_event *te, int ret = 0; if (ctdb->recovery_mode != CTDB_RECOVERY_NORMAL || - (ctdb->monitor->monitoring_mode == CTDB_MONITORING_DISABLED && ctdb->done_startup)) { + (ctdb->monitor->monitoring_mode == CTDB_MONITORING_DISABLED && + ctdb->runstate == CTDB_RUNSTATE_RUNNING)) { event_add_timed(ctdb->ev, ctdb->monitor->monitor_context, timeval_current_ofs(ctdb->monitor->next_interval, 0), ctdb_check_health, ctdb); return; } - if (!ctdb->done_startup) { + if (ctdb->runstate == CTDB_RUNSTATE_STARTUP) { ret = ctdb_event_script_callback(ctdb, ctdb->monitor->monitor_context, ctdb_startup_callback, ctdb, false, @@ -477,7 +478,7 @@ int32_t ctdb_control_modflags(struct ctdb_context *ctdb, TDB_DATA indata) DEBUG(DEBUG_INFO, ("Control modflags on node %u - flags now 0x%x\n", c->pnn, node->flags)); - if (node->flags == 0 && !ctdb->done_startup) { + if (node->flags == 0 && ctdb->runstate == CTDB_RUNSTATE_STARTUP) { DEBUG(DEBUG_ERR, (__location__ " Node %u became healthy - force recovery for startup\n", c->pnn)); ctdb->recovery_mode = CTDB_RECOVERY_ACTIVE; diff --git a/ctdb/server/ctdb_takeover.c b/ctdb/server/ctdb_takeover.c index 3d7820584f..d8e77dfb1f 100644 --- a/ctdb/server/ctdb_takeover.c +++ b/ctdb/server/ctdb_takeover.c @@ -84,7 +84,7 @@ static int ctdb_add_local_iface(struct ctdb_context *ctdb, const char *iface) * IPs can't be assigned, and after startup IPs can be * assigned immediately. */ - i->link_up = ctdb->done_startup; + i->link_up = (ctdb->runstate == CTDB_RUNSTATE_RUNNING); DLIST_ADD(ctdb->ifaces, i); |