9f5ccc
From 852c475040a599ed35798dbb388c6b59c1d0a820 Mon Sep 17 00:00:00 2001
9f5ccc
From: Sanju Rakonde <srakonde@redhat.com>
9f5ccc
Date: Tue, 22 Oct 2019 15:06:29 +0530
9f5ccc
Subject: [PATCH 323/335] cli: display detailed rebalance info
9f5ccc
9f5ccc
Problem: When one of the node is down in cluster,
9f5ccc
rebalance status is not displaying detailed
9f5ccc
information.
9f5ccc
9f5ccc
Cause: In glusterd_volume_rebalance_use_rsp_dict()
9f5ccc
we are aggregating rsp from all the nodes into a
9f5ccc
dictionary and sending it to cli for printing. While
9f5ccc
assigning a index to keys we are considering all the
9f5ccc
peers instead of considering only the peers which are
9f5ccc
up. Because of which, index is not reaching till 1.
9f5ccc
while parsing the rsp cli unable to find status-1
9f5ccc
key in dictionary and going out without printing
9f5ccc
any information.
9f5ccc
9f5ccc
Solution: The simplest fix for this without much
9f5ccc
code change is to continue to look for other keys
9f5ccc
when status-1 key is not found.
9f5ccc
9f5ccc
> upstream patch: https://review.gluster.org/#/c/glusterfs/+/23588
9f5ccc
> fixes: bz#1764119
9f5ccc
> Change-Id: I0062839933c9706119eb85416256eade97e976dc
9f5ccc
> Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
9f5ccc
9f5ccc
BUG: 1761326
9f5ccc
Change-Id: I0062839933c9706119eb85416256eade97e976dc
9f5ccc
Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
9f5ccc
Reviewed-on: https://code.engineering.redhat.com/gerrit/185749
9f5ccc
Tested-by: RHGS Build Bot <nigelb@redhat.com>
9f5ccc
Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
9f5ccc
---
9f5ccc
 cli/src/cli-rpc-ops.c                      | 21 ++++++++++++++-------
9f5ccc
 tests/bugs/glusterd/rebalance-in-cluster.t |  9 +++++++++
9f5ccc
 2 files changed, 23 insertions(+), 7 deletions(-)
9f5ccc
9f5ccc
diff --git a/cli/src/cli-rpc-ops.c b/cli/src/cli-rpc-ops.c
9f5ccc
index b167e26..4e91265 100644
9f5ccc
--- a/cli/src/cli-rpc-ops.c
9f5ccc
+++ b/cli/src/cli-rpc-ops.c
9f5ccc
@@ -1597,13 +1597,20 @@ gf_cli_print_rebalance_status(dict_t *dict, enum gf_task_types task_type,
9f5ccc
         goto out;
9f5ccc
     }
9f5ccc
 
9f5ccc
-    snprintf(key, sizeof(key), "status-1");
9f5ccc
-
9f5ccc
-    ret = dict_get_int32(dict, key, (int32_t *)&status_rcd);
9f5ccc
-    if (ret) {
9f5ccc
-        gf_log("cli", GF_LOG_TRACE, "count %d %d", count, 1);
9f5ccc
-        gf_log("cli", GF_LOG_TRACE, "failed to get status");
9f5ccc
-        goto out;
9f5ccc
+    for (i = 1; i <= count; i++) {
9f5ccc
+        snprintf(key, sizeof(key), "status-%d", i);
9f5ccc
+        ret = dict_get_int32(dict, key, (int32_t *)&status_rcd);
9f5ccc
+        /* If information from a node is missing we should skip
9f5ccc
+         * the node and try to fetch information of other nodes.
9f5ccc
+         * If information is not found for all nodes, we should
9f5ccc
+         * error out.
9f5ccc
+         */
9f5ccc
+        if (!ret)
9f5ccc
+            break;
9f5ccc
+        if (ret && i == count) {
9f5ccc
+            gf_log("cli", GF_LOG_TRACE, "failed to get status");
9f5ccc
+            goto out;
9f5ccc
+        }
9f5ccc
     }
9f5ccc
 
9f5ccc
     /* Fix layout will be sent to all nodes for the volume
9f5ccc
diff --git a/tests/bugs/glusterd/rebalance-in-cluster.t b/tests/bugs/glusterd/rebalance-in-cluster.t
9f5ccc
index 9565fae..469ec6c 100644
9f5ccc
--- a/tests/bugs/glusterd/rebalance-in-cluster.t
9f5ccc
+++ b/tests/bugs/glusterd/rebalance-in-cluster.t
9f5ccc
@@ -4,6 +4,10 @@
9f5ccc
 . $(dirname $0)/../../cluster.rc
9f5ccc
 . $(dirname $0)/../../volume.rc
9f5ccc
 
9f5ccc
+function rebalance_status_field_1 {
9f5ccc
+        $CLI_1 volume rebalance $1 status | awk '{print $7}' | sed -n 3p
9f5ccc
+}
9f5ccc
+
9f5ccc
 cleanup;
9f5ccc
 TEST launch_cluster 2;
9f5ccc
 TEST $CLI_1 peer probe $H2;
9f5ccc
@@ -29,6 +33,11 @@ TEST $CLI_1 volume add-brick $V0 $H1:$B1/${V0}1 $H2:$B2/${V0}1
9f5ccc
 TEST $CLI_1 volume rebalance $V0  start
9f5ccc
 EXPECT_WITHIN $REBALANCE_TIMEOUT "completed" cluster_rebalance_status_field 1  $V0
9f5ccc
 
9f5ccc
+#bug - 1764119 - rebalance status should display detailed info when any of the node is dowm
9f5ccc
+TEST kill_glusterd 2
9f5ccc
+EXPECT_WITHIN $REBALANCE_TIMEOUT "completed" rebalance_status_field_1 $V0
9f5ccc
+
9f5ccc
+TEST start_glusterd 2
9f5ccc
 #bug-1245142
9f5ccc
 
9f5ccc
 $CLI_1 volume rebalance $V0  start &
9f5ccc
-- 
9f5ccc
1.8.3.1
9f5ccc