e3c68b
From 4fc0a77db5b9760fa5c00d3803c6d11a28a00b74 Mon Sep 17 00:00:00 2001
e3c68b
From: Mohit Agrawal <moagrawal@redhat.com>
e3c68b
Date: Wed, 3 Jul 2019 15:22:38 +0530
e3c68b
Subject: [PATCH 229/255] glusterd: Show the correct brick status in get-state
e3c68b
e3c68b
Problem: get-state does not show correct brick status if brick
e3c68b
         status is not Started, it always shows started if any value
e3c68b
         is set brickinfo->status
e3c68b
e3c68b
Solution: Check the value of brickinfo->status to show correct status
e3c68b
          in get-state
e3c68b
e3c68b
> Change-Id: I12a79619024c2cf59f338220d144f2f034059b3b
e3c68b
> fixes: bz#1726906
e3c68b
> (Cherry pick from commit af989db23d1db00e087f2b9d3dfc43b13ef17153)
e3c68b
> (Reviewed on upstream link https://review.gluster.org/#/c/glusterfs/+/22983/)
e3c68b
e3c68b
BUG: 1726991
e3c68b
Change-Id: I12a79619024c2cf59f338220d144f2f034059b3b
e3c68b
Signed-off-by: Mohit Agrawal <moagrawal@redhat.com>
e3c68b
Reviewed-on: https://code.engineering.redhat.com/gerrit/175355
e3c68b
Tested-by: Mohit Agrawal <moagrawa@redhat.com>
e3c68b
Tested-by: RHGS Build Bot <nigelb@redhat.com>
e3c68b
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
e3c68b
---
e3c68b
 xlators/mgmt/glusterd/src/glusterd-handler.c |  7 +++++--
e3c68b
 xlators/mgmt/glusterd/src/glusterd-utils.c   | 28 ++++++++++++++++++++++++++++
e3c68b
 xlators/mgmt/glusterd/src/glusterd-utils.h   |  4 ++++
e3c68b
 3 files changed, 37 insertions(+), 2 deletions(-)
e3c68b
e3c68b
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
e3c68b
index cc1f1df..94e1be5 100644
e3c68b
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
e3c68b
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
e3c68b
@@ -5589,7 +5589,9 @@ glusterd_get_state(rpcsvc_request_t *req, dict_t *dict)
e3c68b
     char vol_status_str[STATUS_STRLEN] = {
e3c68b
         0,
e3c68b
     };
e3c68b
-
e3c68b
+    char brick_status_str[STATUS_STRLEN] = {
e3c68b
+        0,
e3c68b
+    };
e3c68b
     this = THIS;
e3c68b
     GF_VALIDATE_OR_GOTO(THIS->name, this, out);
e3c68b
 
e3c68b
@@ -5852,8 +5854,9 @@ glusterd_get_state(rpcsvc_request_t *req, dict_t *dict)
e3c68b
                     brickinfo->rdma_port);
e3c68b
             fprintf(fp, "Volume%d.Brick%d.port_registered: %d\n", count_bkp,
e3c68b
                     count, brickinfo->port_registered);
e3c68b
+            glusterd_brick_get_status_str(brickinfo, brick_status_str);
e3c68b
             fprintf(fp, "Volume%d.Brick%d.status: %s\n", count_bkp, count,
e3c68b
-                    brickinfo->status ? "Started" : "Stopped");
e3c68b
+                    brick_status_str);
e3c68b
 
e3c68b
             /*FIXME: This is a hacky way of figuring out whether a
e3c68b
              * brick belongs to the hot or cold tier */
e3c68b
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
e3c68b
index 2eb5116..3bdfd49 100644
e3c68b
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
e3c68b
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
e3c68b
@@ -13898,6 +13898,34 @@ out:
e3c68b
     return ret;
e3c68b
 }
e3c68b
 
e3c68b
+void
e3c68b
+glusterd_brick_get_status_str(glusterd_brickinfo_t *brickinfo, char *status_str)
e3c68b
+{
e3c68b
+    GF_VALIDATE_OR_GOTO(THIS->name, brickinfo, out);
e3c68b
+    GF_VALIDATE_OR_GOTO(THIS->name, status_str, out);
e3c68b
+
e3c68b
+    switch (brickinfo->status) {
e3c68b
+        case GF_BRICK_STOPPED:
e3c68b
+            sprintf(status_str, "%s", "Stopped");
e3c68b
+            break;
e3c68b
+        case GF_BRICK_STARTED:
e3c68b
+            sprintf(status_str, "%s", "Started");
e3c68b
+            break;
e3c68b
+        case GF_BRICK_STARTING:
e3c68b
+            sprintf(status_str, "%s", "Starting");
e3c68b
+            break;
e3c68b
+        case GF_BRICK_STOPPING:
e3c68b
+            sprintf(status_str, "%s", "Stopping");
e3c68b
+            break;
e3c68b
+        default:
e3c68b
+            sprintf(status_str, "%s", "None");
e3c68b
+            break;
e3c68b
+    }
e3c68b
+
e3c68b
+out:
e3c68b
+    return;
e3c68b
+}
e3c68b
+
e3c68b
 int
e3c68b
 glusterd_volume_get_transport_type_str(glusterd_volinfo_t *volinfo,
e3c68b
                                        char *transport_type_str)
e3c68b
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h
e3c68b
index 6ad8062..5c6a453 100644
e3c68b
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
e3c68b
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
e3c68b
@@ -781,6 +781,10 @@ glusterd_volume_get_type_str(glusterd_volinfo_t *volinfo, char **vol_type_str);
e3c68b
 int
e3c68b
 glusterd_volume_get_status_str(glusterd_volinfo_t *volinfo, char *status_str);
e3c68b
 
e3c68b
+void
e3c68b
+glusterd_brick_get_status_str(glusterd_brickinfo_t *brickinfo,
e3c68b
+                              char *status_str);
e3c68b
+
e3c68b
 int
e3c68b
 glusterd_volume_get_transport_type_str(glusterd_volinfo_t *volinfo,
e3c68b
                                        char *transport_type_str);
e3c68b
-- 
e3c68b
1.8.3.1
e3c68b