From b4beaa0505e8b23ac027fb6c995aa259c3f7550a Mon Sep 17 00:00:00 2001 From: Samikshan Bairagya Date: Wed, 5 Apr 2017 18:03:10 +0530 Subject: glusterd: Add client details to get-state output This commit optionally adds client details corresponding to the locally running bricks to the get-state output. Since getting the client details involves sending RPC requests to the respective local bricks, this is a relatively more costly operation. These client details would be added to the get-state output only if the get-state command is invoked with the 'detail' option. This commit therefore also changes the get-state CLI usage. The modified usage is as follows: # gluster get-state [] [[odir ] \ [file ]] [detail] Change-Id: I42cd4ef160f9e96d55a08a10d32c8ba44e4cd3d8 BUG: 1431183 Signed-off-by: Samikshan Bairagya Reviewed-on: https://review.gluster.org/17003 NetBSD-regression: NetBSD Build System Smoke: Gluster Build System CentOS-regression: Gluster Build System Reviewed-by: Atin Mukherjee --- cli/src/cli-cmd-global.c | 3 ++- cli/src/cli-cmd-parser.c | 36 +++++++++++++++++++++++++++++++----- 2 files changed, 33 insertions(+), 6 deletions(-) (limited to 'cli') diff --git a/cli/src/cli-cmd-global.c b/cli/src/cli-cmd-global.c index 2f9d24501d4..0f08985318e 100644 --- a/cli/src/cli-cmd-global.c +++ b/cli/src/cli-cmd-global.c @@ -41,7 +41,8 @@ struct cli_cmd global_cmds[] = { cli_cmd_global_help_cbk, "list global commands", }, - { "get-state [] [odir ] [file ]", + { "get-state [] [[odir ] " + "[file ]] [detail]", cli_cmd_get_state_cbk, "Get local state representation of mentioned daemon", }, diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index be53cd2ed40..c43b52b63a2 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -829,6 +829,7 @@ cli_cmd_get_state_parse (struct cli_state *state, char *filename = NULL; char *daemon_name = NULL; int count = 0; + uint32_t cmd = 0; GF_VALIDATE_OR_GOTO ("cli", options, out); GF_VALIDATE_OR_GOTO ("cli", words, out); @@ -837,7 +838,7 @@ cli_cmd_get_state_parse (struct cli_state *state, if (!dict) goto out; - if (wordcount < 1 || wordcount > 6) { + if (wordcount < 1 || wordcount > 7) { *op_errstr = gf_strdup ("Problem parsing arguments." " Check usage."); goto out; @@ -868,16 +869,28 @@ cli_cmd_get_state_parse (struct cli_state *state, } } else { if (count > 1) { - *op_errstr = gf_strdup ("Problem " - "parsing arguments. " + if (count == wordcount-1 && + !strcmp (words[count], "detail")) { + cmd = GF_CLI_GET_STATE_DETAIL; + continue; + } else { + *op_errstr = gf_strdup ("Problem" + " parsing arguments. " "Check usage."); - ret = -1; - goto out; + ret = -1; + goto out; + } } if (strcmp (words[count], "glusterd") == 0) { continue; } else { + if (count == wordcount-1 && + !strcmp (words[count], "detail")) { + cmd = GF_CLI_GET_STATE_DETAIL; + continue; + } + *op_errstr = gf_strdup ("glusterd is " "the only supported daemon."); ret = -1; @@ -919,6 +932,19 @@ cli_cmd_get_state_parse (struct cli_state *state, goto out; } } + + if (cmd) { + ret = dict_set_uint32 (dict, "getstate-cmd", cmd); + if (ret) { + *op_errstr = gf_strdup ("Command failed. Please" + " check log file for" + " more details."); + gf_log (THIS->name, GF_LOG_ERROR, "Setting " + "get-state command type to dictionary " + "failed"); + goto out; + } + } } out: -- cgit