diff options
| -rwxr-xr-x | ctdb/config/ctdb.init | 2 | ||||
| -rwxr-xr-x | ctdb/config/events.d/00.ctdb | 2 | ||||
| -rw-r--r-- | ctdb/doc/ctdb.1.xml | 7 | ||||
| -rw-r--r-- | ctdb/tools/ctdb.c | 25 |
4 files changed, 32 insertions, 4 deletions
diff --git a/ctdb/config/ctdb.init b/ctdb/config/ctdb.init index 6c4e16d0de..70dcfa6421 100755 --- a/ctdb/config/ctdb.init +++ b/ctdb/config/ctdb.init @@ -220,7 +220,7 @@ wait_until_ready () { _timeout="${1:-10}" # default is 10 seconds _count=0 - while ! ctdb ping >/dev/null 2>&1 ; do + while ! ctdb runstate startup running >/dev/null 2>&1 ; do if [ $_count -ge $_timeout ] ; then return 1 fi diff --git a/ctdb/config/events.d/00.ctdb b/ctdb/config/events.d/00.ctdb index c1ac11a923..02d1569107 100755 --- a/ctdb/config/events.d/00.ctdb +++ b/ctdb/config/events.d/00.ctdb @@ -53,7 +53,7 @@ wait_until_ready () { _timeout="${1:-10}" # default is 10 seconds _count=0 - while ! ctdb ping >/dev/null 2>&1 ; do + while ! ctdb runstate setup >/dev/null 2>&1 ; do if [ $_count -ge $_timeout ] ; then return 1 fi diff --git a/ctdb/doc/ctdb.1.xml b/ctdb/doc/ctdb.1.xml index d1734b7c8f..7242f3aa29 100644 --- a/ctdb/doc/ctdb.1.xml +++ b/ctdb/doc/ctdb.1.xml @@ -382,13 +382,18 @@ response from 3 time=0.000114 sec (2 clients) </screen> </refsect2> - <refsect2><title>runstate</title> + <refsect2><title>runstate [setup|startup|running]</title> <para> Print the runstate of the specified node. Runstates are used to serialise important state transitions in CTDB, particularly during startup. </para> <para> + If one or more optional runstate arguments are specified then + the node must be in one of these runstates for the command to + succeed. + </para> + <para> Example: ctdb runstate </para> <para> diff --git a/ctdb/tools/ctdb.c b/ctdb/tools/ctdb.c index 842c872b64..e21e845073 100644 --- a/ctdb/tools/ctdb.c +++ b/ctdb/tools/ctdb.c @@ -4385,6 +4385,29 @@ static int control_runstate(struct ctdb_context *ctdb, int argc, const char **ar printf("Unable to get runstate response from node %u\n", options.pnn); return -1; + } else { + bool found = true; + enum ctdb_runstate t; + int i; + for (i=0; i<argc; i++) { + found = false; + t = runstate_from_string(argv[i]); + if (t == CTDB_RUNSTATE_UNKNOWN) { + printf("Invalid run state (%s)\n", argv[i]); + return -1; + } + + if (t == runstate) { + found = true; + break; + } + } + + if (!found) { + printf("CTDB not in required run state (got %s)\n", + runstate_to_string((enum ctdb_runstate)runstate)); + return -1; + } } printf("%s\n", runstate_to_string(runstate)); @@ -5824,7 +5847,7 @@ static const struct { { "status", control_status, true, false, "show node status" }, { "uptime", control_uptime, true, false, "show node uptime" }, { "ping", control_ping, true, false, "ping all nodes" }, - { "runstate", control_runstate, true, false, "get runstate of a node" }, + { "runstate", control_runstate, true, false, "get/check runstate of a node", "[setup|startup|running]" }, { "getvar", control_getvar, true, false, "get a tunable variable", "<name>"}, { "setvar", control_setvar, true, false, "set a tunable variable", "<name> <value>"}, { "listvars", control_listvars, true, false, "list tunable variables"}, |
