diff options
| -rw-r--r-- | cli/src/cli-cmd-parser.c | 18 | ||||
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 20 | ||||
| -rw-r--r-- | xlators/debug/io-stats/src/io-stats.c | 4 | 
3 files changed, 28 insertions, 14 deletions
diff --git a/cli/src/cli-cmd-parser.c b/cli/src/cli-cmd-parser.c index 66e5643fc..69f95653d 100644 --- a/cli/src/cli-cmd-parser.c +++ b/cli/src/cli-cmd-parser.c @@ -1253,7 +1253,7 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,          int      ret            = -1;          gf1_cli_stats_op op = GF_CLI_STATS_NONE;          gf1_cli_top_op    top_op = GF_CLI_TOP_NONE; -        int32_t  list_cnt       = 0; +        int32_t  list_cnt       = -1;          int      index          = 0;          int      perf           = 0;          int32_t  blk_size       = 0; @@ -1332,15 +1332,11 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,                  } else if (!strcmp (key, "list-cnt")) {                          list_cnt = atoi(value); -                        if (!list_cnt) { -                                list_cnt = 100; -                        } -                        if (list_cnt < 1 || list_cnt > 100) { -                                cli_out ("list-cnt should be between 1 to 100"); +                        if (list_cnt < 0 || list_cnt > 100) { +                                cli_out ("list-cnt should be between 0 to 100");                                  ret = -1;                                  goto out;                          } -                        ret = dict_set_int32 (dict, "list-cnt", list_cnt);                  } else if (perf && !strcmp (key, "bs")){                          blk_size = atoi (value);                          if (blk_size < 0){ @@ -1369,6 +1365,14 @@ cli_cmd_volume_top_parse (const char **words, int wordcount,                          goto out;                  }          } +        if (list_cnt == -1) +                list_cnt = 100; +        ret = dict_set_int32 (dict, "list-cnt", list_cnt); +        if (ret) { +                gf_log ("", GF_LOG_WARNING, "Dict set failed for list_cnt"); +                goto out; +        } +          *options = dict;  out:          if (ret && dict) diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 92658af47..e1f51d306 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -3184,7 +3184,7 @@ gf_cli3_1_top_volume_cbk (struct rpc_req *req, struct iovec *iov,          dict_t                            *dict = NULL;          gf1_cli_stats_op                op = GF_CLI_STATS_NONE;          char                              key[256] = {0}; -        int                               i = 1; +        int                               i = 0;          int32_t                           brick_count = 0;          char                              brick[1024];          int32_t                           members = 0; @@ -3251,16 +3251,20 @@ gf_cli3_1_top_volume_cbk (struct rpc_req *req, struct iovec *iov,          ret = dict_get_int32 (dict, "count", &brick_count);          if (ret)                  goto out; -        snprintf (key, sizeof (key), "%d-top-op", i); +        snprintf (key, sizeof (key), "%d-top-op", 1);          ret = dict_get_int32 (dict, key, (int32_t*)&top_op);          if (ret)                  goto out;          while (i <= brick_count) { +                i++;                  snprintf (brick, sizeof (brick), "%d-brick", i);                  ret = dict_get_str (dict, brick, &bricks);                  if (ret)                          goto out;                  cli_out ("Brick: %s", bricks); +                snprintf(key, sizeof (key), "%d-members", i); +                ret = dict_get_int32 (dict, key, &members); +                  switch (top_op) {                  case GF_CLI_TOP_OPEN:                          snprintf (key, sizeof (key), "%d-current-open", i); @@ -3277,6 +3281,10 @@ gf_cli3_1_top_volume_cbk (struct rpc_req *req, struct iovec *iov,                  case GF_CLI_TOP_WRITE:                  case GF_CLI_TOP_OPENDIR:                  case GF_CLI_TOP_READDIR: +                        if (!members) { +                                cli_out ("No entries in list"); +                                continue; +                        }                          cli_out ("Count\t\tfilename\n=======================");                          break;                  case GF_CLI_TOP_READ_PERF: @@ -3291,13 +3299,16 @@ gf_cli3_1_top_volume_cbk (struct rpc_req *req, struct iovec *iov,                                  cli_out ("Throughput %.2f MBps time %.4f secs", throughput,                                            time / 1e6); +                        if (!members) { +                                cli_out ("No entries in list"); +                                continue; +                        }                          cli_out ("MBps\t\tfilename\t\t time\n========================");                          break;                  default:                          goto out;                  } -                snprintf(key, sizeof (key), "%d-members", i); -                ret = dict_get_int32 (dict, key, &members); +                  for (j = 1; j <= members; j++) {                          snprintf (key, sizeof (key), "%d-filename-%d", i, j);                          ret = dict_get_str (dict, key, &filename); @@ -3329,7 +3340,6 @@ gf_cli3_1_top_volume_cbk (struct rpc_req *req, struct iovec *iov,                                  cli_out ("%"PRIu64"\t\t%s", value, filename);                          }                  } -                i++;          }          ret = rsp.op_ret; diff --git a/xlators/debug/io-stats/src/io-stats.c b/xlators/debug/io-stats/src/io-stats.c index 863f77a2a..d4dd786ab 100644 --- a/xlators/debug/io-stats/src/io-stats.c +++ b/xlators/debug/io-stats/src/io-stats.c @@ -1039,6 +1039,8 @@ io_stats_dump_stats_to_dict (xlator_t *this, dict_t *resp,                         goto out;          }          ret = dict_set_int32 (resp, "top-op", flags); +        if (!list_cnt) +                goto out;          LOCK (&list_head->lock);          {                  list_for_each_entry (entry, &list_head->iosstats->list, list) { @@ -2600,8 +2602,6 @@ notify (xlator_t *this, int32_t event, void *data, ...)                  ret = dict_get_int32 (dict, "top-op", &top_op);                  if (!ret) {                          ret = dict_get_int32 (dict, "list-cnt", &list_cnt); -                        if (!list_cnt) -                                list_cnt = 100;                          if (top_op > IOS_STATS_TYPE_NONE &&                              top_op < IOS_STATS_TYPE_MAX)                                  ret = io_stats_dump_stats_to_dict (this, output,  | 
