summaryrefslogtreecommitdiffstats
path: root/cli/src/cli-cmd-parser.c
diff options
context:
space:
mode:
authorKaushal M <kaushal@redhat.com>2012-02-01 14:44:07 +0530
committerVijay Bellur <vijay@gluster.com>2012-02-17 00:57:02 -0800
commit489a7a10fe2e00d00d86f0304145a4910bb94070 (patch)
tree1e2c28f5e124ae781a1c6dbbb3b33f3ad3d77ee8 /cli/src/cli-cmd-parser.c
parent7fa06c4ce1a44bbd89d3798193f173c057533bb6 (diff)
cli: Fix for statedump crashing gluster processes
1. Fixes the bug in statedump causing the gluster process to crash when an unknown option was given in the 'glusterdump.*.options' file. 2. Also fixes cli, making it send full statedump option strings even when only partial option strings are given in 'volume statedump' command. 3. Minor change to order of operations during statedump to allow option parsing errors to be written to the dump file. Change-Id: Ic878cbca4dbf46b83fba0fd88fcb3c03f05ae46d BUG: 772586 Signed-off-by: Kaushal M <kaushal@redhat.com> Reviewed-on: http://review.gluster.com/2706 Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vijay@gluster.com>
Diffstat (limited to 'cli/src/cli-cmd-parser.c')
-rw-r--r--cli/src/cli-cmd-parser.c16
1 files changed, 9 insertions, 7 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c
index b169b77c68d..090a7246913 100644
--- a/cli/src/cli-cmd-parser.c
+++ b/cli/src/cli-cmd-parser.c
@@ -1976,18 +1976,19 @@ cli_cmd_volume_status_parse (const char **words, int wordcount,
}
gf_boolean_t
-cli_cmd_validate_dumpoption (const char *option)
+cli_cmd_validate_dumpoption (const char *arg, char **option)
{
char *opwords[] = {"all", "nfs", "mem", "iobuf", "callpool", "priv",
- "fd", "inode", NULL};
+ "fd", "inode", NULL};
char *w = NULL;
- w = str_getunamb (option, opwords);
+ w = str_getunamb (arg, opwords);
if (!w) {
gf_log ("cli", GF_LOG_DEBUG, "Unknown statedump option %s",
- option);
+ arg);
return _gf_false;
}
+ *option = w;
return _gf_true;
}
@@ -1999,14 +2000,15 @@ cli_cmd_volume_statedump_options_parse (const char **words, int wordcount,
int i = 0;
dict_t *dict = NULL;
int option_cnt = 0;
+ char *option = NULL;
char option_str[100] = {0,};
for (i = 3; i < wordcount; i++, option_cnt++) {
- if (!cli_cmd_validate_dumpoption (words[i])) {
+ if (!cli_cmd_validate_dumpoption (words[i], &option)) {
ret = -1;
goto out;
}
- strncat (option_str, words[i], sizeof (words [i]));
+ strncat (option_str, option, strlen (option));
strncat (option_str, " ", 1);
}
@@ -2014,7 +2016,7 @@ cli_cmd_volume_statedump_options_parse (const char **words, int wordcount,
if (!dict)
goto out;
- ret = dict_set_str (dict, "options", gf_strdup (option_str));
+ ret = dict_set_dynstr (dict, "options", gf_strdup (option_str));
if (ret)
goto out;