diff options
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 56 | ||||
| -rw-r--r-- | cli/src/cli-cmd-volume.c | 8 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 85 | 
3 files changed, 114 insertions, 35 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 24310cac5..0f13928bb 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: diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 6b9c0b03f..9546831ab 100644 --- a/cli/src/cli-cmd-volume.c +++ b/cli/src/cli-cmd-volume.c @@ -1804,7 +1804,7 @@ struct cli_cmd volume_cmds[] = {           cli_cmd_check_gsync_exists_cbk},  #endif -         { "volume profile <VOLNAME> {start|info|stop}", +         { "volume profile <VOLNAME> {start|info|stop} [nfs]",             cli_cmd_volume_profile_cbk,             "volume profile operations"}, @@ -1812,13 +1812,13 @@ struct cli_cmd volume_cmds[] = {            cli_cmd_quota_cbk,            "quota translator specific operations"}, -         { "volume top <VOLNAME> {[open|read|write|opendir|readdir] " -           "|[read-perf|write-perf bs <size> count <count>]} " +         { "volume top <VOLNAME> {[open|read|write|opendir|readdir [nfs]] " +           "|[read-perf|write-perf [nfs|{bs <size> count <count>}]]} "             " [brick <brick>] [list-cnt <count>]",             cli_cmd_volume_top_cbk,             "volume top operations"}, -        { "volume status [all | <VOLNAME> [<BRICK>]]" +        { "volume status [all | <VOLNAME> [nfs|<BRICK>]]"            " [detail|clients|mem|inode|fd|callpool]",            cli_cmd_volume_status_cbk,            "display status of all or specified volume(s)/brick"}, diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 20688b096..dbef04a99 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -3506,7 +3506,6 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)          uint64_t                sec = 0;          uint64_t                r_count = 0;          uint64_t                w_count = 0; -        char                    *brick = NULL;          uint64_t                rb_counts[32] = {0};          uint64_t                wb_counts[32] = {0};          cli_profile_info_t      profile_info[GF_FOP_MAXVALUE] = {{0}}; @@ -3519,9 +3518,6 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)          int                     ret = 0;          double                  total_percentage_latency = 0; -        memset (key, 0, sizeof (key)); -        snprintf (key, sizeof (key), "%d-brick", count); -        ret = dict_get_str (dict, key, &brick);          for (i = 0; i < 32; i++) {                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "%d-%d-read-%d", count, @@ -3584,7 +3580,6 @@ cmd_profile_volume_brick_out (dict_t *dict, int count, int interval)          ret = dict_get_uint64 (dict, key, &w_count);          if (ret == 0) { -                cli_out ("Brick: %s", brick);          }          if (interval == -1) @@ -3681,6 +3676,9 @@ gf_cli3_1_profile_volume_cbk (struct rpc_req *req, struct iovec *iov,          int                               i = 1;          int32_t                           brick_count = 0;          char                              *volname = NULL; +        char                              *brick = NULL; +        char                              str[1024] = {0,}; +          if (-1 == req->rpc_status) {                  goto out;          } @@ -3775,6 +3773,23 @@ gf_cli3_1_profile_volume_cbk (struct rpc_req *req, struct iovec *iov,          }          while (i <= brick_count) { +                memset (key, 0, sizeof (key)); +                snprintf (key, sizeof (key), "%d-brick", i); +                ret = dict_get_str (dict, key, &brick); +                if (ret) { +                        gf_log ("cli", GF_LOG_ERROR, "Couldn't get brick name"); +                        goto out; +                } + +                ret = dict_get_str_boolean (dict, "nfs", _gf_false); +                if (ret) +                        snprintf (str, sizeof (str), "NFS Server : %s", brick); +                else +                        snprintf (str, sizeof (str), "Brick: %s", brick); +                cli_out (str); +                memset (str, '-', strlen (str)); +                cli_out (str); +                  snprintf (key, sizeof (key), "%d-cumulative", i);                  ret = dict_get_int32 (dict, key, &interval);                  if (ret == 0) { @@ -3935,7 +3950,12 @@ gf_cli3_1_top_volume_cbk (struct rpc_req *req, struct iovec *iov,                  ret = dict_get_str (dict, brick, &bricks);                  if (ret)                          goto out; -                cli_out ("Brick: %s", bricks); +                ret = dict_get_str_boolean (dict, "nfs", _gf_false); +                if (ret) +                        cli_out ("NFS Server : %s", bricks); +                else +                        cli_out ("Brick: %s", bricks); +                  snprintf(key, sizeof (key), "%d-members", i);                  ret = dict_get_int32 (dict, key, &members); @@ -4237,7 +4257,7 @@ out:  }  void -cli_print_volume_status_mem (dict_t *dict) +cli_print_volume_status_mem (dict_t *dict, gf_boolean_t nfs)  {          int             ret = -1;          char            *volname = NULL; @@ -4273,7 +4293,10 @@ cli_print_volume_status_mem (dict_t *dict)                  ret = dict_get_str (dict, key, &path);                  if (ret)                          goto out; -                cli_out ("Brick : %s:%s", hostname, path); +                if (nfs) +                        cli_out ("%s : %s", hostname, path); +                else +                        cli_out ("Brick : %s:%s", hostname, path);                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.status", i); @@ -4368,7 +4391,7 @@ out:  }  void -cli_print_volume_status_clients (dict_t *dict) +cli_print_volume_status_clients (dict_t *dict, gf_boolean_t nfs)  {          int             ret = -1;          char            *volname = NULL; @@ -4408,7 +4431,11 @@ cli_print_volume_status_clients (dict_t *dict)                  ret = dict_get_str (dict, key, &path);                  if (ret)                          goto out; -                cli_out ("Brick : %s:%s", hostname, path); + +                if (nfs) +                        cli_out ("%s : %s", hostname, path); +                else +                        cli_out ("Brick : %s:%s", hostname, path);                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.status", i); @@ -4609,7 +4636,7 @@ out:  }  void -cli_print_volume_status_inode (dict_t *dict) +cli_print_volume_status_inode (dict_t *dict, gf_boolean_t nfs)  {          int             ret = -1;          char            *volname = NULL; @@ -4646,7 +4673,10 @@ cli_print_volume_status_inode (dict_t *dict)                  ret = dict_get_str (dict, key, &path);                  if (ret)                          goto out; -                cli_out ("Brick : %s:%s", hostname, path); +                if (nfs) +                        cli_out ("%s : %s", hostname, path); +                else +                        cli_out ("Brick : %s:%s", hostname, path);                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.status", i); @@ -4762,7 +4792,7 @@ out:  }  void -cli_print_volume_status_fd (dict_t *dict) +cli_print_volume_status_fd (dict_t *dict, gf_boolean_t nfs)  {          int             ret = -1;          char            *volname = NULL; @@ -4799,7 +4829,11 @@ cli_print_volume_status_fd (dict_t *dict)                  ret = dict_get_str (dict, key, &path);                  if (ret)                          goto out; -                cli_out ("Brick : %s:%s", hostname, path); + +                if (nfs) +                        cli_out ("%s : %s", hostname, path); +                else +                        cli_out ("Brick : %s:%s", hostname, path);                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.status", i); @@ -4976,7 +5010,7 @@ cli_print_volume_status_call_stack (dict_t *dict, char *prefix)  }  void -cli_print_volume_status_callpool (dict_t *dict) +cli_print_volume_status_callpool (dict_t *dict, gf_boolean_t nfs)  {          int             ret = -1;          char            *volname = NULL; @@ -5013,7 +5047,11 @@ cli_print_volume_status_callpool (dict_t *dict)                  ret = dict_get_str (dict, key, &path);                  if (ret)                          goto out; -                cli_out ("Brick : %s:%s", hostname, path); + +                if (nfs) +                        cli_out ("%s : %s", hostname, path); +                else +                        cli_out ("Brick : %s:%s", hostname, path);                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.status", i); @@ -5058,6 +5096,7 @@ gf_cli3_1_status_cbk (struct rpc_req *req, struct iovec *iov,          int                             i              = 0;          int                             pid            = -1;          uint32_t                        cmd            = 0; +        gf_boolean_t                    nfs            = _gf_false;          char                            key[1024]      = {0,};          char                           *hostname       = NULL;          char                           *path           = NULL; @@ -5101,6 +5140,10 @@ gf_cli3_1_status_cbk (struct rpc_req *req, struct iovec *iov,                  ret = 0;                  goto out;          } + +        if (cmd & GF_CLI_STATUS_NFS) +                nfs = _gf_true; +          ret = dict_get_int32 (dict, "count", &count);          if (ret)                  goto out; @@ -5125,23 +5168,23 @@ gf_cli3_1_status_cbk (struct rpc_req *req, struct iovec *iov,          switch (cmd & GF_CLI_STATUS_MASK) {                  case GF_CLI_STATUS_MEM: -                        cli_print_volume_status_mem (dict); +                        cli_print_volume_status_mem (dict, nfs);                          goto cont;                          break;                  case GF_CLI_STATUS_CLIENTS: -                        cli_print_volume_status_clients (dict); +                        cli_print_volume_status_clients (dict, nfs);                          goto cont;                          break;                  case GF_CLI_STATUS_INODE: -                        cli_print_volume_status_inode (dict); +                        cli_print_volume_status_inode (dict, nfs);                          goto cont;                          break;                  case GF_CLI_STATUS_FD: -                        cli_print_volume_status_fd (dict); +                        cli_print_volume_status_fd (dict, nfs);                          goto cont;                          break;                  case GF_CLI_STATUS_CALLPOOL: -                        cli_print_volume_status_callpool (dict); +                        cli_print_volume_status_callpool (dict, nfs);                          goto cont;                          break;                  default:  | 
