diff options
| author | Atin Mukherjee <amukherj@redhat.com> | 2016-07-01 11:47:48 +0530 | 
|---|---|---|
| committer | Atin Mukherjee <amukherj@redhat.com> | 2016-07-08 10:18:05 -0700 | 
| commit | be03507d5224cf44c0e8ca4120c02ce409f5b08c (patch) | |
| tree | 321f4171acd2443d61bafe59a729d62399d34943 /cli | |
| parent | 754e2658ba58743bc4ef2d843410334e639a96e1 (diff) | |
cli: print volume status client output for partial bricks
Backport of http://review.gluster.org/14842
In cli the response dictionary is parsed assuming all the bricks to be up.
If in a given cluster one of the node is down client details for the
bricks hosted by the same node are not available in the dictionary resulting
into a blank output for 'gluster volume status <volname> clients'
Fix is to ignore the ret value for dict_get for those keys.
Change-Id: If4fb65b8807ea3ac71b3ed1a754ea75f599e3613
BUG: 1352926
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: http://review.gluster.org/14842
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Reviewed-on: http://review.gluster.org/14865
Reviewed-by: Kaushal M <kaushal@redhat.com>
Diffstat (limited to 'cli')
| -rw-r--r-- | cli/src/cli-rpc-ops.c | 37 | 
1 files changed, 17 insertions, 20 deletions
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c index 4adf34fd608..d5d98542203 100644 --- a/cli/src/cli-rpc-ops.c +++ b/cli/src/cli-rpc-ops.c @@ -6952,29 +6952,33 @@ cli_print_volume_status_clients (dict_t *dict, gf_boolean_t notbrick)          index_max = brick_index_max + other_count;          for (i = 0; i <= index_max; i++) { +                hostname = NULL; +                path = NULL; +                online = -1; +                client_count = 0; +                clientname = NULL; +                bytesread = 0; +                byteswrite = 0; +                  cli_out ("----------------------------------------------");                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.hostname", i);                  ret = dict_get_str (dict, key, &hostname); -                if (ret) -                        goto out; +                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.path", i);                  ret = dict_get_str (dict, key, &path); -                if (ret) -                        goto out; - -                if (notbrick) -                        cli_out ("%s : %s", hostname, path); -                else -                        cli_out ("Brick : %s:%s", hostname, path); +                if (hostname && path) { +                        if (notbrick) +                                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);                  ret = dict_get_int32 (dict, key, &online); -                if (ret) -                        goto out;                  if (!online) {                          if (notbrick)                                  cli_out ("%s is offline", hostname); @@ -6986,10 +6990,9 @@ cli_print_volume_status_clients (dict_t *dict, gf_boolean_t notbrick)                  memset (key, 0, sizeof (key));                  snprintf (key, sizeof (key), "brick%d.clientcount", i);                  ret = dict_get_int32 (dict, key, &client_count); -                if (ret) -                        goto out; -                cli_out ("Clients connected : %d", client_count); +                if (hostname && path) +                        cli_out ("Clients connected : %d", client_count);                  if (client_count == 0)                          continue; @@ -7002,22 +7005,16 @@ cli_print_volume_status_clients (dict_t *dict, gf_boolean_t notbrick)                          snprintf (key, sizeof (key),                                    "brick%d.client%d.hostname", i, j);                          ret = dict_get_str (dict, key, &clientname); -                        if (ret) -                                goto out;                          memset (key, 0, sizeof (key));                          snprintf (key, sizeof (key),                                    "brick%d.client%d.bytesread", i, j);                          ret = dict_get_uint64 (dict, key, &bytesread); -                        if (ret) -                                goto out;                          memset (key, 0, sizeof (key));                          snprintf (key, sizeof (key),                                   "brick%d.client%d.byteswrite", i, j);                          ret = dict_get_uint64 (dict, key, &byteswrite); -                        if (ret) -                                goto out;                          cli_out ("%-48s %15"PRIu64" %15"PRIu64,                                   clientname, bytesread, byteswrite);  | 
