Gitweb:
http://git.fedorahosted.org/git/?p=dlm.git;a=commitdiff;h=cbc0685865996ce...
Commit: cbc0685865996ced65f5b52f037d32d838d63570
Parent: 87007d98a6f20bc4b923aa87937818e765bfb0a4
Author: David Teigland <teigland(a)redhat.com>
AuthorDate: Tue Jan 29 13:58:14 2013 -0600
Committer: David Teigland <teigland(a)redhat.com>
CommitterDate: Tue Jan 29 14:03:47 2013 -0600
dlm_tool: show status of startup nodes
During startup fencing, the dlm_tool status
output was not clear what was happening.
Now it displays the startup_nodes with
state 'U' (unknown).
Signed-off-by: David Teigland <teigland(a)redhat.com>
---
dlm_controld/daemon_cpg.c | 23 +++++++++++++++++++++++
dlm_controld/dlm_controld.h | 1 +
dlm_controld/dlm_daemon.h | 1 +
dlm_controld/lib.c | 12 +++++++++++-
dlm_controld/main.c | 1 +
5 files changed, 37 insertions(+), 1 deletions(-)
diff --git a/dlm_controld/daemon_cpg.c b/dlm_controld/daemon_cpg.c
index 4002809..b6532a3 100644
--- a/dlm_controld/daemon_cpg.c
+++ b/dlm_controld/daemon_cpg.c
@@ -2133,6 +2133,29 @@ void send_state_daemon_nodes(int fd)
}
}
+void send_state_startup_nodes(int fd)
+{
+ struct node_daemon *node;
+ struct dlmc_state st;
+ char str[DLMC_STATE_MAXSTR];
+ int str_len;
+
+ list_for_each_entry(node, &startup_nodes, list) {
+ memset(&st, 0, sizeof(st));
+ st.type = DLMC_STATE_STARTUP_NODE;
+ st.nodeid = node->nodeid;
+
+ memset(str, 0, sizeof(str));
+ str_len = print_state_daemon_node(node, str);
+
+ st.str_len = str_len;
+
+ send(fd, &st, sizeof(st), MSG_NOSIGNAL);
+ if (str_len)
+ send(fd, str, str_len, MSG_NOSIGNAL);
+ }
+}
+
static int print_state_daemon(char *str)
{
snprintf(str, DLMC_STATE_MAXSTR-1,
diff --git a/dlm_controld/dlm_controld.h b/dlm_controld/dlm_controld.h
index d25bfc5..fc13795 100644
--- a/dlm_controld/dlm_controld.h
+++ b/dlm_controld/dlm_controld.h
@@ -50,6 +50,7 @@ struct dlmc_header {
#define DLMC_STATE_DAEMON 1
#define DLMC_STATE_DAEMON_NODE 2
+#define DLMC_STATE_STARTUP_NODE 3
struct dlmc_state {
uint32_t type; /* DLMC_STATE_ */
diff --git a/dlm_controld/dlm_daemon.h b/dlm_controld/dlm_daemon.h
index 662cc35..60d3d46 100644
--- a/dlm_controld/dlm_daemon.h
+++ b/dlm_controld/dlm_daemon.h
@@ -349,6 +349,7 @@ void set_protocol_stateful(void);
int set_protocol(void);
void send_state_daemon_nodes(int fd);
void send_state_daemon(int fd);
+void send_state_startup_nodes(int fd);
void log_config(const struct cpg_name *group_name,
const struct cpg_address *member_list,
diff --git a/dlm_controld/lib.c b/dlm_controld/lib.c
index 1b78407..961626f 100644
--- a/dlm_controld/lib.c
+++ b/dlm_controld/lib.c
@@ -275,11 +275,20 @@ static void format_daemon_node(struct dlmc_state *st, char *str,
char *bin, uint
char *node_line, char *fence_line)
{
unsigned int delay_fencing, result_wait, killed;
+ char letter;
+
+ if (st->type == DLMC_STATE_STARTUP_NODE)
+ letter = 'U';
+ else if (kv(str, "member"))
+ letter = 'M';
+ else
+ letter = 'X';
+
snprintf(node_line, DLMC_STATE_MAXSTR - 1,
"node %d %c add %u rem %u fail %u fence %u at %u %u\n",
st->nodeid,
- kv(str, "member") ? 'M' : 'X',
+ letter,
kv(str, "add_time"),
kv(str, "rem_time"),
kv(str, "fail_monotime"),
@@ -394,6 +403,7 @@ int dlmc_print_status(uint32_t flags)
break;
case DLMC_STATE_DAEMON_NODE:
+ case DLMC_STATE_STARTUP_NODE:
if (flags & DLMC_STATUS_VERBOSE) {
printf("nodeid %d\n", st->nodeid);
diff --git a/dlm_controld/main.c b/dlm_controld/main.c
index 953cf1b..8fb16ef 100644
--- a/dlm_controld/main.c
+++ b/dlm_controld/main.c
@@ -877,6 +877,7 @@ static void *process_queries(void *arg)
case DLMC_CMD_DUMP_STATUS:
send_state_daemon(f);
send_state_daemon_nodes(f);
+ send_state_startup_nodes(f);
break;
default:
break;