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 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: diff --git a/cli/src/cli-cmd-volume.c b/cli/src/cli-cmd-volume.c index 6b9c0b03f41..9546831ab7c 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 20688b09687..dbef04a99f8 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: |