summaryrefslogtreecommitdiff
path: root/0484-glusterd-rebalance-status-displays-stats-as-0-after-.patch
diff options
context:
space:
mode:
Diffstat (limited to '0484-glusterd-rebalance-status-displays-stats-as-0-after-.patch')
-rw-r--r--0484-glusterd-rebalance-status-displays-stats-as-0-after-.patch90
1 files changed, 90 insertions, 0 deletions
diff --git a/0484-glusterd-rebalance-status-displays-stats-as-0-after-.patch b/0484-glusterd-rebalance-status-displays-stats-as-0-after-.patch
new file mode 100644
index 0000000..56d4feb
--- /dev/null
+++ b/0484-glusterd-rebalance-status-displays-stats-as-0-after-.patch
@@ -0,0 +1,90 @@
+From 6c3b21ce5bb76b35856a6c270eb65d11f869061f Mon Sep 17 00:00:00 2001
+From: Sanju Rakonde <srakonde@redhat.com>
+Date: Fri, 26 Jun 2020 12:10:31 +0530
+Subject: [PATCH 484/511] glusterd: rebalance status displays stats as 0 after
+ reboot
+
+problem: while the rebalance is in progress, if a node is
+rebooted rebalance v status shows the stats of this node as
+0 once the node is back.
+
+Reason: when the node is rebooted, once it is back
+glusterd_volume_defrag_restart() starts the rebalance and
+creates the rpc. but due to some race, rebalance process is
+sending disconnect event, so rpc object is getting destroyed. As
+the rpc object is null, request for fetching the latest stats is
+not sent to rebalance process. and stats are shows as default values
+which is 0.
+
+Solution: When the rpc object null, we should create the rpc if the
+rebalance process is up. so that request can be sent to rebalance
+process using the rpc.
+
+>fixes: #1339
+>Change-Id: I1c7533fedd17dcaffc0f7a5a918c87356133a81c
+>Signed-off-by: Sanju Rakonde <srakonde@redhat.com>
+Upstream Patch : https://review.gluster.org/c/glusterfs/+/24641
+
+BUG: 1832306
+Change-Id: I1c7533fedd17dcaffc0f7a5a918c87356133a81c
+Signed-off-by: Srijan Sivakumar <ssivakum@redhat.com>
+Reviewed-on: https://code.engineering.redhat.com/gerrit/220369
+Tested-by: RHGS Build Bot <nigelb@redhat.com>
+Reviewed-by: Sunil Kumar Heggodu Gopala Acharya <sheggodu@redhat.com>
+---
+ xlators/mgmt/glusterd/src/glusterd-syncop.c | 29 ++++++++++++++++++++---------
+ 1 file changed, 20 insertions(+), 9 deletions(-)
+
+diff --git a/xlators/mgmt/glusterd/src/glusterd-syncop.c b/xlators/mgmt/glusterd/src/glusterd-syncop.c
+index c78983a..df78fef 100644
+--- a/xlators/mgmt/glusterd/src/glusterd-syncop.c
++++ b/xlators/mgmt/glusterd/src/glusterd-syncop.c
+@@ -1693,6 +1693,7 @@ gd_brick_op_phase(glusterd_op_t op, dict_t *op_ctx, dict_t *req_dict,
+ rpc_clnt_t *rpc = NULL;
+ dict_t *rsp_dict = NULL;
+ int32_t cmd = GF_OP_CMD_NONE;
++ glusterd_volinfo_t *volinfo = NULL;
+
+ this = THIS;
+ rsp_dict = dict_new();
+@@ -1724,18 +1725,28 @@ gd_brick_op_phase(glusterd_op_t op, dict_t *op_ctx, dict_t *req_dict,
+ cds_list_for_each_entry_safe(pending_node, tmp, &selected, list)
+ {
+ rpc = glusterd_pending_node_get_rpc(pending_node);
++ /* In the case of rebalance if the rpc object is null, we try to
++ * create the rpc object. if the rebalance daemon is down, it returns
++ * -1. otherwise, rpc object will be created and referenced.
++ */
+ if (!rpc) {
+- if (pending_node->type == GD_NODE_REBALANCE) {
+- ret = 0;
+- glusterd_defrag_volume_node_rsp(req_dict, NULL, op_ctx);
++ if (pending_node->type == GD_NODE_REBALANCE && pending_node->node) {
++ volinfo = pending_node->node;
++ ret = glusterd_rebalance_rpc_create(volinfo);
++ if (ret) {
++ ret = 0;
++ glusterd_defrag_volume_node_rsp(req_dict, NULL, op_ctx);
++ goto out;
++ } else {
++ rpc = glusterd_defrag_rpc_get(volinfo->rebal.defrag);
++ }
++ } else {
++ ret = -1;
++ gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_RPC_FAILURE,
++ "Brick Op failed "
++ "due to rpc failure.");
+ goto out;
+ }
+-
+- ret = -1;
+- gf_msg(this->name, GF_LOG_ERROR, 0, GD_MSG_RPC_FAILURE,
+- "Brick Op failed "
+- "due to rpc failure.");
+- goto out;
+ }
+
+ /* Redirect operation to be detach tier via rebalance flow. */
+--
+1.8.3.1
+