Blob Blame History Raw
From 8cb14d157652ca92c927a61476263c238195548a Mon Sep 17 00:00:00 2001
From: Atin Mukherjee <amukherj@redhat.com>
Date: Fri, 12 Aug 2016 10:22:17 +0530
Subject: [PATCH 49/86] glusterd: add async events (part 2)

>Reviewed-on: http://review.gluster.org/15153
>Smoke: Gluster Build System <jenkins@build.gluster.org>
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>Reviewed-by: Samikshan Bairagya <samikshan@gmail.com>

Change-Id: I7a5687143713c283f0051aac2383f780e3e43646
BUG: 1360807
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/84795
---
 events/eventskeygen.py                             |   14 ++++-
 xlators/mgmt/glusterd/src/glusterd-rebalance.c     |    2 +-
 xlators/mgmt/glusterd/src/glusterd-scrub-svc.c     |    2 +
 xlators/mgmt/glusterd/src/glusterd-server-quorum.c |    2 +
 xlators/mgmt/glusterd/src/glusterd-shd-svc.c       |    2 +
 xlators/mgmt/glusterd/src/glusterd-snapd-svc.c     |   42 +++++++++-----
 xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c      |    3 +
 xlators/mgmt/glusterd/src/glusterd-utils.c         |   60 ++++++++++++++++----
 8 files changed, 99 insertions(+), 28 deletions(-)

diff --git a/events/eventskeygen.py b/events/eventskeygen.py
index 570c905..885c9de 100644
--- a/events/eventskeygen.py
+++ b/events/eventskeygen.py
@@ -49,8 +49,9 @@ keys = (
 
     "EVENT_SVC_MANAGER_FAILED",
     "EVENT_SVC_RECONFIGURE_FAILED",
+    "EVENT_SVC_CONNECTED",
+    "EVENT_SVC_DISCONNECTED",
 
-    "EVENT_DEFRAG_STATUS_UPDATE_FAILED",
 
     "EVENT_PEER_STORE_FAILURE",
     "EVENT_PEER_RPC_CREATE_FAILED",
@@ -64,8 +65,19 @@ keys = (
     "EVENT_BRICK_STOP_FAILED",
     "EVENT_BRICK_DISCONNECTED",
     "EVENT_BRICK_CONNECTED",
+    "EVENT_BRICKS_START_FAILED",
+    "EVENT_BRICKPATH_RESOLVE_FAILED",
 
     "EVENT_NOTIFY_UNKNOWN_OP",
+    "EVENT_QUORUM_LOST",
+    "EVENT_QUORUM_REGAINED",
+    "EVENT_REBALANCE_START_FAILED",
+    "EVENT_REBALANCE_STATUS_UPDATE_FAILED",
+    "EVENT_IMPORT_QUOTA_CONF_FAILED",
+    "EVENT_IMPORT_VOLUME_FAILED",
+    "EVENT_IMPORT_BRICK_FAILED",
+    "EVENT_COMPARE_FRIEND_VOLUME_FAILED",
+    "EVENT_NFS_GANESHA_EXPORT_FAILED",
 )
 
 LAST_EVENT = "EVENT_LAST"
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
index 67d1c82..c2f1e45 100644
--- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c
+++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
@@ -1128,7 +1128,7 @@ glusterd_defrag_event_notify_handle (dict_t *dict)
                 gf_msg (this->name, GF_LOG_ERROR, 0,
                         GD_MSG_DEFRAG_STATUS_UPDATE_FAIL,
                         "Failed to update status");
-                gf_event (EVENT_DEFRAG_STATUS_UPDATE_FAILED, "volume=%s",
+                gf_event (EVENT_REBALANCE_STATUS_UPDATE_FAILED, "volume=%s",
                           volinfo->volname);
         }
 
diff --git a/xlators/mgmt/glusterd/src/glusterd-scrub-svc.c b/xlators/mgmt/glusterd/src/glusterd-scrub-svc.c
index 3761dba..7544529 100644
--- a/xlators/mgmt/glusterd/src/glusterd-scrub-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-scrub-svc.c
@@ -101,6 +101,8 @@ glusterd_scrubsvc_manager (glusterd_svc_t *svc, void *data, int flags)
         }
 
 out:
+        if (ret)
+                gf_event (EVENT_SVC_MANAGER_FAILED, "svc_name=%s", svc->name);
         gf_msg_debug (THIS->name, 0, "Returning %d", ret);
 
         return ret;
diff --git a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
index ecf9d53..35f6ad1 100644
--- a/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
+++ b/xlators/mgmt/glusterd/src/glusterd-server-quorum.c
@@ -339,11 +339,13 @@ glusterd_do_volume_quorum_action (xlator_t *this, glusterd_volinfo_t *volinfo,
                         GD_MSG_SERVER_QUORUM_MET_STARTING_BRICKS,
                         "Server quorum regained for volume %s. Starting local "
                         "bricks.", volinfo->volname);
+                gf_event (EVENT_QUORUM_REGAINED, "volume=%s", volinfo->volname);
         } else if (quorum_status == DOESNT_MEET_QUORUM) {
                 gf_msg (this->name, GF_LOG_CRITICAL, 0,
                         GD_MSG_SERVER_QUORUM_LOST_STOPPING_BRICKS,
                         "Server quorum lost for volume %s. Stopping local "
                         "bricks.", volinfo->volname);
+                gf_event (EVENT_QUORUM_LOST, "volume=%s", volinfo->volname);
         }
 
         list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
diff --git a/xlators/mgmt/glusterd/src/glusterd-shd-svc.c b/xlators/mgmt/glusterd/src/glusterd-shd-svc.c
index 0e664b5..e0135ea 100644
--- a/xlators/mgmt/glusterd/src/glusterd-shd-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-shd-svc.c
@@ -136,6 +136,8 @@ glusterd_shdsvc_manager (glusterd_svc_t *svc, void *data, int flags)
                 }
         }
 out:
+        if (ret)
+                gf_event (EVENT_SVC_MANAGER_FAILED, "svc_name=%s", svc->name);
         gf_msg_debug (THIS->name, 0, "Returning %d", ret);
 
         return ret;
diff --git a/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c b/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c
index 36e4a19..acb24ff 100644
--- a/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c
+++ b/xlators/mgmt/glusterd/src/glusterd-snapd-svc.c
@@ -204,6 +204,10 @@ glusterd_snapdsvc_manager (glusterd_svc_t *svc, void *data, int flags)
         }
 
 out:
+        if (ret) {
+                gf_event (EVENT_SVC_MANAGER_FAILED, "volume=%s;svc_name=%s",
+                          volinfo->volname, svc->name);
+        }
         gf_msg_debug (THIS->name, 0, "Returning %d", ret);
 
         return ret;
@@ -347,6 +351,9 @@ glusterd_snapdsvc_restart ()
                                         GD_MSG_SNAPD_START_FAIL,
                                         "Couldn't resolve snapd for "
                                         "vol: %s on restart", volinfo->volname);
+                                gf_event (EVENT_SVC_MANAGER_FAILED,
+                                          "volume=%s;svc_name=%s",
+                                          volinfo->volname, svc->name);
                                 goto out;
                         }
                 }
@@ -373,11 +380,28 @@ glusterd_snapdsvc_rpc_notify (glusterd_conn_t *conn, rpc_clnt_event_t event)
                         GD_MSG_SVC_GET_FAIL, "Failed to get the service");
                 return -1;
         }
+        snapd = cds_list_entry (svc, glusterd_snapdsvc_t, svc);
+        if (!snapd) {
+                gf_msg (this->name, GF_LOG_ERROR, 0,
+                        GD_MSG_SNAPD_OBJ_GET_FAIL, "Failed to get the "
+                        "snapd object");
+                return -1;
+        }
+
+        volinfo = cds_list_entry (snapd, glusterd_volinfo_t, snapd);
+        if (!volinfo) {
+                gf_msg (this->name, GF_LOG_ERROR, 0,
+                        GD_MSG_VOLINFO_GET_FAIL, "Failed to get the "
+                        "volinfo object");
+                return -1;
+        }
 
         switch (event) {
         case RPC_CLNT_CONNECT:
                 gf_msg_debug (this->name, 0, "%s has connected with "
                         "glusterd.", svc->name);
+                gf_event (EVENT_SVC_CONNECTED, "volume=%s;svc_name=%s",
+                          volinfo->volname, svc->name);
                 svc->online =  _gf_true;
                 break;
 
@@ -386,26 +410,14 @@ glusterd_snapdsvc_rpc_notify (glusterd_conn_t *conn, rpc_clnt_event_t event)
                         gf_msg (this->name, GF_LOG_INFO, 0,
                                 GD_MSG_NODE_DISCONNECTED, "%s has disconnected "
                                 "from glusterd.", svc->name);
+                        gf_event (EVENT_SVC_DISCONNECTED,
+                                  "volume=%s;svc_name=%s", volinfo->volname,
+                                  svc->name);
                         svc->online =  _gf_false;
                 }
                 break;
 
         case RPC_CLNT_DESTROY:
-                snapd = cds_list_entry (svc, glusterd_snapdsvc_t, svc);
-                if (!snapd) {
-                        gf_msg (this->name, GF_LOG_ERROR, 0,
-                                GD_MSG_SNAPD_OBJ_GET_FAIL, "Failed to get the "
-                                "snapd object");
-                        return -1;
-                }
-
-                volinfo = cds_list_entry (snapd, glusterd_volinfo_t, snapd);
-                if (!volinfo) {
-                        gf_msg (this->name, GF_LOG_ERROR, 0,
-                                GD_MSG_VOLINFO_GET_FAIL, "Failed to get the "
-                                "volinfo object");
-                        return -1;
-                }
                 glusterd_volinfo_unref (volinfo);
 
         default:
diff --git a/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c b/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c
index 454c2a4..d6e57a4 100644
--- a/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c
+++ b/xlators/mgmt/glusterd/src/glusterd-svc-mgmt.c
@@ -316,6 +316,7 @@ glusterd_svc_common_rpc_notify (glusterd_conn_t *conn,
         case RPC_CLNT_CONNECT:
                 gf_msg_debug (this->name, 0, "%s has connected with "
                         "glusterd.", svc->name);
+                gf_event (EVENT_SVC_CONNECTED, "svc_name=%s", svc->name);
                 svc->online =  _gf_true;
                 break;
 
@@ -324,6 +325,8 @@ glusterd_svc_common_rpc_notify (glusterd_conn_t *conn,
                         gf_msg (this->name, GF_LOG_INFO, 0,
                                 GD_MSG_NODE_DISCONNECTED, "%s has disconnected "
                                 "from glusterd.", svc->name);
+                        gf_event (EVENT_SVC_DISCONNECTED, "svc_name=%s",
+                                  svc->name);
                         svc->online =  _gf_false;
                 }
                 break;
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 66c8b63..6b18d17 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -2986,6 +2986,10 @@ glusterd_compare_friend_volume (dict_t *peer_data, int32_t count,
         *status = GLUSTERD_VOL_COMP_SCS;
 
 out:
+        if (ret) {
+                gf_event (EVENT_COMPARE_FRIEND_VOLUME_FAILED, "volume=%s",
+                          volinfo->volname);
+        }
         gf_msg_debug (this->name, 0, "Returning with ret: %d, status: %d",
                 ret, *status);
         return ret;
@@ -3204,9 +3208,12 @@ glusterd_import_new_brick (dict_t *peer_data, int32_t vol_count,
 
         *brickinfo = new_brickinfo;
 out:
-        if (msg[0])
+        if (msg[0]) {
                 gf_msg ("glusterd", GF_LOG_ERROR, 0,
                         GD_MSG_BRICK_IMPORT_FAIL, "%s", msg);
+                gf_event (EVENT_IMPORT_BRICK_FAILED, "peer=%s;brick=%s",
+                          new_brickinfo->hostname, new_brickinfo->path);
+        }
         gf_msg_debug ("glusterd", 0, "Returning with %d", ret);
         return ret;
 }
@@ -3812,9 +3819,12 @@ glusterd_import_volinfo (dict_t *peer_data, int count,
 
         *volinfo = new_volinfo;
 out:
-        if (msg[0])
+        if (msg[0]) {
                 gf_msg ("glusterd", GF_LOG_ERROR, 0,
                         GD_MSG_VOLINFO_IMPORT_FAIL, "%s", msg);
+                gf_event (EVENT_IMPORT_VOLUME_FAILED, "volume=%s",
+                          new_volinfo->volname);
+        }
         gf_msg_debug ("glusterd", 0, "Returning with %d", ret);
         return ret;
 }
@@ -4127,11 +4137,17 @@ glusterd_import_friend_volume (dict_t *peer_data, size_t count)
         }
 
         if (glusterd_is_volume_started (new_volinfo)) {
-                (void) glusterd_start_bricks (new_volinfo);
+                if (glusterd_start_bricks (new_volinfo)) {
+                        gf_event (EVENT_BRICKS_START_FAILED, "volume=%s",
+                                  new_volinfo->volname);
+                }
                 if (glusterd_is_snapd_enabled (new_volinfo)) {
                         svc = &(new_volinfo->snapd.svc);
-                        (void) svc->manager (svc, new_volinfo,
-                                             PROC_START_NO_WAIT);
+                        if (svc->manager (svc, new_volinfo,
+                                          PROC_START_NO_WAIT)){
+                                gf_event (EVENT_SVC_MANAGER_FAILED,
+                                          "svc_name=%s", svc->name);
+                        }
                 }
         }
 
@@ -4157,6 +4173,8 @@ glusterd_import_friend_volume (dict_t *peer_data, size_t count)
                                 " ret: %d for volume %s ganesha.enable %s",
                                 ret, new_volinfo->volname,
                                 value);
+                        gf_event (EVENT_NFS_GANESHA_EXPORT_FAILED, "volume=%s",
+                                  new_volinfo->volname);
                         goto out;
                 }
         }
@@ -4174,9 +4192,11 @@ glusterd_import_friend_volume (dict_t *peer_data, size_t count)
 
         ret = glusterd_import_quota_conf (peer_data, count,
                                           new_volinfo, "volume");
-        if (ret)
+        if (ret) {
+                gf_event (EVENT_IMPORT_QUOTA_CONF_FAILED, "volume=%s",
+                          new_volinfo->volname);
                 goto out;
-
+        }
         glusterd_list_add_order (&new_volinfo->vol_list, &priv->volumes,
                                  glusterd_compare_volume_name);
 
@@ -4393,7 +4413,9 @@ glusterd_compare_friend_data (dict_t *peer_data, int32_t *status,
                 if (ret)
                         goto out;
 
-                glusterd_svcs_manager (NULL);
+                if (glusterd_svcs_manager (NULL)) {
+                        gf_event (EVENT_SVC_MANAGER_FAILED, "");
+                }
         }
 
 out:
@@ -4861,6 +4883,10 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
                                 GD_MSG_RESOLVE_BRICK_FAIL,
                                 FMTSTR_RESOLVE_BRICK,
                                 brickinfo->hostname, brickinfo->path);
+                        gf_event (EVENT_BRICKPATH_RESOLVE_FAILED,
+                                  "peer=%s;volume=%s;brick=%s",
+                                  brickinfo->hostname, volinfo->volname,
+                                  brickinfo->path);
                         goto out;
                 }
         }
@@ -4875,6 +4901,9 @@ glusterd_brick_start (glusterd_volinfo_t *volinfo,
                         GD_MSG_BRICK_DISCONNECTED,
                         "Unable to start brick %s:%s",
                         brickinfo->hostname, brickinfo->path);
+                gf_event (EVENT_BRICK_START_FAILED,
+                         "peer=%s;volume=%s;brick=%s", brickinfo->hostname,
+                         volinfo->volname, brickinfo->path);
                 goto out;
         }
 
@@ -4915,7 +4944,9 @@ glusterd_restart_bricks (glusterd_conf_t *conf)
                         continue;
                 if (start_svcs == _gf_false) {
                         start_svcs = _gf_true;
-                        glusterd_svcs_manager (NULL);
+                        if (glusterd_svcs_manager (NULL)) {
+                                gf_event (EVENT_SVC_MANAGER_FAILED, "");
+                        }
                 }
                 gf_msg_debug (this->name, 0, "starting the volume %s",
                         volinfo->volname);
@@ -4965,7 +4996,9 @@ glusterd_restart_bricks (glusterd_conf_t *conf)
                         }
                         if (start_svcs == _gf_false) {
                                 start_svcs = _gf_true;
-                                glusterd_svcs_manager (volinfo);
+                                if (glusterd_svcs_manager (volinfo)) {
+                                        gf_event (EVENT_SVC_MANAGER_FAILED, "");
+                                }
                         }
                         start_svcs = _gf_true;
                         gf_msg_debug (this->name, 0, "starting the snap "
@@ -7370,6 +7403,8 @@ glusterd_volume_defrag_restart (glusterd_volinfo_t *volinfo, char *op_errstr,
                                         "Failed to initialize  defrag."
                                         "Not starting rebalance process for "
                                         "%s.", volinfo->volname);
+                                gf_event (EVENT_REBALANCE_START_FAILED,
+                                          "volume=%s", volinfo->volname);
                                 goto out;
                         }
                         ret = glusterd_rebalance_rpc_create (volinfo, _gf_true);
@@ -7378,8 +7413,11 @@ glusterd_volume_defrag_restart (glusterd_volinfo_t *volinfo, char *op_errstr,
         case GF_DEFRAG_STATUS_NOT_STARTED:
                 ret = glusterd_handle_defrag_start (volinfo, op_errstr, len,
                                 cmd, cbk, volinfo->rebal.op);
-                if (ret)
+                if (ret) {
                         volinfo->rebal.defrag_status = GF_DEFRAG_STATUS_FAILED;
+                        gf_event (EVENT_REBALANCE_START_FAILED,
+                                  "volume=%s", volinfo->volname);
+                }
                 break;
         default:
                 gf_msg (this->name, GF_LOG_ERROR, 0,
-- 
1.7.1