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