diff options
Diffstat (limited to 'cli/src/cli-cmd-parser.c')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 56 | 
1 files changed, 46 insertions, 10 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 24310cac56c..0f13928bbfc 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -1648,7 +1648,7 @@ cli_cmd_volume_profile_parse (const char **words, int wordcount,          if (!dict)                  goto out; -        if (wordcount != 4) +        if (wordcount < 4 || wordcount >5)                  goto out;          volname = (char *)words[2]; @@ -1670,7 +1670,19 @@ cli_cmd_volume_profile_parse (const char **words, int wordcount,                  op = GF_CLI_STATS_INFO;          } else                  GF_ASSERT (!"opword mismatch"); +          ret = dict_set_int32 (dict, "op", (int32_t)op); +        if (ret) +                goto out; + +        if (wordcount == 5) { +                if (!strcmp (words[4], "nfs")) { +                        ret = dict_set_int32 (dict, "nfs", _gf_true); +                        if (ret) +                                goto out; +                } +        } +          *options = dict;  out:          if (ret && dict) @@ -1694,6 +1706,7 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,          int      perf           = 0;          uint32_t  blk_size      = 0;          uint32_t  count         = 0; +        gf_boolean_t nfs        = _gf_false;          char    *delimiter      = NULL;          char    *opwords[]      = { "open", "read", "write", "opendir",                                      "readdir", "read-perf", "write-perf", @@ -1748,7 +1761,17 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,          if (ret)                  goto out; -        for (index = 4; index < wordcount; index+=2) { +        if ((wordcount > 4) && !strcmp (words[4], "nfs")) { +                nfs = _gf_true; +                ret = dict_set_int32 (dict, "nfs", nfs); +                if (ret) +                        goto out; +                index = 5; +        } else { +                index = 4; +        } + +        for (; index < wordcount; index+=2) {                  key = (char *) words[index];                  value = (char *) words[index+1]; @@ -1781,7 +1804,7 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,                                  ret = -1;                                  goto out;                          } -                } else if (perf && !strcmp (key, "bs")) { +                } else if (perf && !nfs && !strcmp (key, "bs")) {                          ret = gf_is_str_int (value);                          if (!ret)                                  blk_size = atoi (value); @@ -1795,7 +1818,7 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,                                  goto out;                          }                          ret = dict_set_uint32 (dict, "blk-size", blk_size); -                } else if (perf && !strcmp (key, "count")) { +                } else if (perf && !nfs && !strcmp (key, "count")) {                          ret = gf_is_str_int (value);                          if (!ret)                                  count = atoi(value); @@ -1931,9 +1954,13 @@ cli_cmd_volume_status_parse (const char **words, int wordcount,                                  goto out;                          if (cmd == GF_CLI_STATUS_NONE) { -                                cmd = GF_CLI_STATUS_BRICK; -                                ret = dict_set_str (dict, "brick", -                                                    (char *)words[3]); +                                if (!strcmp (words[3], "nfs")) { +                                        cmd |= GF_CLI_STATUS_NFS; +                                } else { +                                        cmd = GF_CLI_STATUS_BRICK; +                                        ret = dict_set_str (dict, "brick", +                                                            (char *)words[3]); +                                }                          } else {                                  cmd |= GF_CLI_STATUS_VOL; @@ -1945,7 +1972,7 @@ cli_cmd_volume_status_parse (const char **words, int wordcount,          case 5:                  if (!strcmp (words[2], "all")) { -                        cli_out ("Cannot specify brick for \"all\""); +                        cli_out ("Cannot specify brick/nfs for \"all\"");                          ret = -1;                          goto out;                  } @@ -1958,13 +1985,22 @@ cli_cmd_volume_status_parse (const char **words, int wordcount,                          goto out;                  } -                cmd |= GF_CLI_STATUS_BRICK;                  ret = dict_set_str (dict, "volname", (char *)words[2]);                  if (ret)                          goto out; -                ret = dict_set_str (dict, "brick", (char *)words[3]); +                if (!strcmp (words[3], "nfs")) { +                        if (cmd == GF_CLI_STATUS_FD) { +                                cli_out ("FD status not available for NFS"); +                                ret = -1; +                                goto out; +                        } +                        cmd |= GF_CLI_STATUS_NFS; +                } else { +                        cmd |= GF_CLI_STATUS_BRICK; +                        ret = dict_set_str (dict, "brick", (char *)words[3]); +                }                  break;          default:  | 
