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