3604df
From 0d3829f2b5cea0cfce4cbd784c66c0d32997b144 Mon Sep 17 00:00:00 2001
3604df
From: Atin Mukherjee <amukherj@redhat.com>
3604df
Date: Tue, 26 Jul 2016 16:01:56 +0530
3604df
Subject: [PATCH 48/86] glusterd: Add async events
3604df
3604df
As the eventing framework is already in the code, this patch targets to capture
3604df
all the async glusterd events which are important to be notified to the higher
3604df
layers which consume the eventing framework.
3604df
3604df
I plan to break this work into two different patches where this patch set covers
3604df
the first set of events.
3604df
3604df
>Reviewed-on: http://review.gluster.org/15015
3604df
>Smoke: Gluster Build System <jenkins@build.gluster.org>
3604df
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
3604df
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
3604df
>Reviewed-by: Rohan Kanade <rkanade@redhat.com>
3604df
>Reviewed-by: Samikshan Bairagya <samikshan@gmail.com>
3604df
3604df
Change-Id: Ie1bd4f6fa84117b26ccb4c75bc4dc68e6ef19134
3604df
BUG: 1360807
3604df
Signed-off-by: Atin Mukherjee <amukherj@redhat.com>
3604df
Reviewed-on: https://code.engineering.redhat.com/gerrit/84793
3604df
---
3604df
 events/eventskeygen.py                          |   20 ++++++++
3604df
 xlators/mgmt/glusterd/src/glusterd-bitd-svc.c   |    3 +
3604df
 xlators/mgmt/glusterd/src/glusterd-handler.c    |   59 ++++++++++++++++++----
3604df
 xlators/mgmt/glusterd/src/glusterd-handshake.c  |    3 +
3604df
 xlators/mgmt/glusterd/src/glusterd-nfs-svc.c    |    3 +
3604df
 xlators/mgmt/glusterd/src/glusterd-op-sm.c      |   11 ++++-
3604df
 xlators/mgmt/glusterd/src/glusterd-pmap.c       |    2 +-
3604df
 xlators/mgmt/glusterd/src/glusterd-quotad-svc.c |    3 +
3604df
 xlators/mgmt/glusterd/src/glusterd-rebalance.c  |    5 ++-
3604df
 xlators/mgmt/glusterd/src/glusterd-svc-helper.c |    4 +-
3604df
 10 files changed, 98 insertions(+), 15 deletions(-)
3604df
3604df
diff --git a/events/eventskeygen.py b/events/eventskeygen.py
3604df
index cac8b7e..570c905 100644
3604df
--- a/events/eventskeygen.py
3604df
+++ b/events/eventskeygen.py
3604df
@@ -46,6 +46,26 @@ keys = (
3604df
     "EVENT_BITROT_SCRUB_FREQ",
3604df
     "EVENT_BITROT_SCRUB_OPTION",
3604df
     "EVENT_BITROT_BAD_FILE",
3604df
+
3604df
+    "EVENT_SVC_MANAGER_FAILED",
3604df
+    "EVENT_SVC_RECONFIGURE_FAILED",
3604df
+
3604df
+    "EVENT_DEFRAG_STATUS_UPDATE_FAILED",
3604df
+
3604df
+    "EVENT_PEER_STORE_FAILURE",
3604df
+    "EVENT_PEER_RPC_CREATE_FAILED",
3604df
+    "EVENT_PEER_REJECT",
3604df
+    "EVENT_PEER_CONNECT",
3604df
+    "EVENT_PEER_DISCONNECT",
3604df
+    "EVENT_PEER_NOT_FOUND",
3604df
+    "EVENT_UNKNOWN_PEER",
3604df
+
3604df
+    "EVENT_BRICK_START_FAILED",
3604df
+    "EVENT_BRICK_STOP_FAILED",
3604df
+    "EVENT_BRICK_DISCONNECTED",
3604df
+    "EVENT_BRICK_CONNECTED",
3604df
+
3604df
+    "EVENT_NOTIFY_UNKNOWN_OP",
3604df
 )
3604df
 
3604df
 LAST_EVENT = "EVENT_LAST"
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c b/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c
3604df
index ee96ccb..f929401 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-bitd-svc.c
3604df
@@ -106,6 +106,9 @@ glusterd_bitdsvc_manager (glusterd_svc_t *svc, void *data, int flags)
3604df
         }
3604df
 
3604df
 out:
3604df
+        if (ret)
3604df
+                gf_event (EVENT_SVC_MANAGER_FAILED, "svc_name=%s", svc->name);
3604df
+
3604df
         gf_msg_debug (THIS->name, 0, "Returning %d", ret);
3604df
 
3604df
         return ret;
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
3604df
index 7009231..b024fdb 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
3604df
@@ -2776,6 +2776,8 @@ __glusterd_handle_friend_update (rpcsvc_request_t *req)
3604df
                         GD_MSG_REQ_FROM_UNKNOWN_PEER,
3604df
                         "Received friend update request "
3604df
                         "from unknown peer %s", uuid_utoa (friend_req.uuid));
3604df
+                gf_event (EVENT_UNKNOWN_PEER, "peer=%s",
3604df
+                          uuid_utoa (friend_req.uuid));
3604df
                 goto out;
3604df
         }
3604df
 
3604df
@@ -2872,10 +2874,13 @@ __glusterd_handle_friend_update (rpcsvc_request_t *req)
3604df
                                 goto unlock;
3604df
                         }
3604df
                         ret = glusterd_store_peerinfo (peerinfo);
3604df
-                        if (ret)
3604df
+                        if (ret) {
3604df
                                 gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
                                         GD_MSG_PEERINFO_CREATE_FAIL,
3604df
                                         "Failed to store peerinfo");
3604df
+                                gf_event (EVENT_PEER_STORE_FAILURE, "peer=%s",
3604df
+                                          peerinfo->hostname);
3604df
+                        }
3604df
                 }
3604df
 unlock:
3604df
                 rcu_read_unlock ();
3604df
@@ -3530,6 +3535,8 @@ glusterd_friend_rpc_create (xlator_t *this, glusterd_peerinfo_t *peerinfo,
3604df
                         GD_MSG_RPC_CREATE_FAIL,
3604df
                         "failed to create rpc for"
3604df
                         " peer %s", peerinfo->hostname);
3604df
+                gf_event (EVENT_PEER_RPC_CREATE_FAILED, "peer=%s",
3604df
+                          peerinfo->hostname);
3604df
                 goto out;
3604df
         }
3604df
         peerctx = NULL;
3604df
@@ -3585,6 +3592,8 @@ glusterd_friend_add (const char *hoststr, int port,
3604df
                         gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
                                 GD_MSG_PEERINFO_CREATE_FAIL,
3604df
                                 "Failed to store peerinfo");
3604df
+                        gf_event (EVENT_PEER_STORE_FAILURE, "peer=%s",
3604df
+                                  (*friend)->hostname);
3604df
                 }
3604df
         }
3604df
 
3604df
@@ -3640,6 +3649,8 @@ glusterd_friend_add_from_peerinfo (glusterd_peerinfo_t *friend,
3604df
                         gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
                                 GD_MSG_PEERINFO_CREATE_FAIL,
3604df
                                 "Failed to store peerinfo");
3604df
+                        gf_event (EVENT_PEER_STORE_FAILURE, "peer=%s",
3604df
+                                  friend->hostname);
3604df
                 }
3604df
         }
3604df
 
3604df
@@ -5519,6 +5530,14 @@ __glusterd_brick_rpc_notify (struct rpc_clnt *rpc, void *mydata,
3604df
 
3604df
         switch (event) {
3604df
         case RPC_CLNT_CONNECT:
3604df
+                ret = get_volinfo_from_brickid (brickid, &volinfo);
3604df
+                if (ret) {
3604df
+                        gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
+                                GD_MSG_VOLINFO_GET_FAIL,
3604df
+                                "Failed to get volinfo from "
3604df
+                                "brickid(%s)", brickid);
3604df
+                        goto out;
3604df
+                }
3604df
                 /* If a node on coming back up, already starts a brick
3604df
                  * before the handshake, and the notification comes after
3604df
                  * the handshake is done, then we need to check if this
3604df
@@ -5532,15 +5551,6 @@ __glusterd_brick_rpc_notify (struct rpc_clnt *rpc, void *mydata,
3604df
                                 "Hence not starting the brick",
3604df
                                 brickinfo->hostname,
3604df
                                 brickinfo->path);
3604df
-                        ret = get_volinfo_from_brickid (brickid, &volinfo);
3604df
-                        if (ret) {
3604df
-                                gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
-                                        GD_MSG_VOLINFO_GET_FAIL,
3604df
-                                        "Failed to get volinfo from "
3604df
-                                        "brickid(%s)", brickid);
3604df
-                                goto out;
3604df
-                        }
3604df
-
3604df
                         ret = glusterd_brick_stop (volinfo, brickinfo,
3604df
                                                    _gf_false);
3604df
                         if (ret) {
3604df
@@ -5557,17 +5567,34 @@ __glusterd_brick_rpc_notify (struct rpc_clnt *rpc, void *mydata,
3604df
                 gf_msg_debug (this->name, 0, "Connected to %s:%s",
3604df
                         brickinfo->hostname, brickinfo->path);
3604df
                 glusterd_set_brick_status (brickinfo, GF_BRICK_STARTED);
3604df
+                gf_event (EVENT_BRICK_CONNECTED, "peer=%s;volume=%s;brick=%s",
3604df
+                          brickinfo->hostname, volinfo->volname,
3604df
+                          brickinfo->path);
3604df
+
3604df
                 ret = default_notify (this, GF_EVENT_CHILD_UP, NULL);
3604df
 
3604df
                 break;
3604df
 
3604df
         case RPC_CLNT_DISCONNECT:
3604df
                 rpc_clnt_unset_connected (&rpc->conn);
3604df
-                if (glusterd_is_brick_started (brickinfo))
3604df
+                if (glusterd_is_brick_started (brickinfo)) {
3604df
                         gf_msg (this->name, GF_LOG_INFO, 0,
3604df
                                 GD_MSG_BRICK_DISCONNECTED,
3604df
                                 "Brick %s:%s has disconnected from glusterd.",
3604df
                                 brickinfo->hostname, brickinfo->path);
3604df
+                        ret = get_volinfo_from_brickid (brickid, &volinfo);
3604df
+                        if (ret) {
3604df
+                                gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
+                                        GD_MSG_VOLINFO_GET_FAIL,
3604df
+                                        "Failed to get volinfo from "
3604df
+                                        "brickid(%s)", brickid);
3604df
+                                goto out;
3604df
+                        }
3604df
+                        gf_event (EVENT_BRICK_DISCONNECTED,
3604df
+                                  "peer=%s;volume=%s;brick=%s",
3604df
+                                  brickinfo->hostname, volinfo->volname,
3604df
+                                  brickinfo->path);
3604df
+                }
3604df
 
3604df
                 glusterd_set_brick_status (brickinfo, GF_BRICK_STOPPED);
3604df
                 break;
3604df
@@ -5694,6 +5721,11 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata,
3604df
                         "%s(%s)", peerctx->peername,
3604df
                         uuid_utoa (peerctx->peerid));
3604df
 
3604df
+                if (RPC_CLNT_CONNECT == event) {
3604df
+                        gf_event (EVENT_PEER_NOT_FOUND, "peer=%s;uuid=%s",
3604df
+                                  peerctx->peername,
3604df
+                                  uuid_utoa (peerctx->peerid));
3604df
+                }
3604df
                 ret = -1;
3604df
                 goto out;
3604df
         }
3604df
@@ -5708,6 +5740,8 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata,
3604df
                 peerinfo->generation = uatomic_add_return
3604df
                                                    (&conf->generation, 1);
3604df
                 peerctx->peerinfo_gen = peerinfo->generation;
3604df
+                gf_event (EVENT_PEER_CONNECT, "host=%s;uuid=%s",
3604df
+                          peerinfo->hostname, uuid_utoa (peerinfo->uuid));
3604df
 
3604df
                 ret = glusterd_peer_dump_version (this, rpc, peerctx);
3604df
                 if (ret)
3604df
@@ -5732,6 +5766,9 @@ __glusterd_peer_rpc_notify (struct rpc_clnt *rpc, void *mydata,
3604df
                         "from glusterd.",
3604df
                         peerinfo->hostname, uuid_utoa (peerinfo->uuid),
3604df
                         glusterd_friend_sm_state_name_get (peerinfo->state.state));
3604df
+                gf_event (EVENT_PEER_DISCONNECT, "peer=%s;uuid=%s;state=%s",
3604df
+                          peerinfo->hostname, uuid_utoa (peerinfo->uuid),
3604df
+                          glusterd_friend_sm_state_name_get (peerinfo->state.state));
3604df
 
3604df
                 if (peerinfo->connected) {
3604df
                         if (conf->op_version < GD_OP_VERSION_RHS_3_0) {
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-handshake.c b/xlators/mgmt/glusterd/src/glusterd-handshake.c
3604df
index 0ea66a0..9f162d8 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-handshake.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-handshake.c
3604df
@@ -984,6 +984,7 @@ __server_event_notify (rpcsvc_request_t *req)
3604df
                 gf_msg ("glusterd", GF_LOG_ERROR, EINVAL,
3604df
                         GD_MSG_OP_UNSUPPORTED, "Unknown op received in event "
3604df
                         "notify");
3604df
+                gf_event (EVENT_NOTIFY_UNKNOWN_OP, "op=%d", args.op);
3604df
                 ret = -1;
3604df
                 break;
3604df
         }
3604df
@@ -1118,6 +1119,8 @@ gd_validate_mgmt_hndsk_req (rpcsvc_request_t *req, dict_t *dict)
3604df
                         GD_MSG_HANDSHAKE_REQ_REJECTED, "Rejecting management "
3604df
                         "handshake request from unknown peer %s",
3604df
                         req->trans->peerinfo.identifier);
3604df
+                gf_event (EVENT_PEER_REJECT, "peer=%s",
3604df
+                          req->trans->peerinfo.identifier);
3604df
                 return _gf_false;
3604df
         }
3604df
 
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c b/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
3604df
index 60b792f..c6ab0c5 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-nfs-svc.c
3604df
@@ -95,6 +95,9 @@ glusterd_nfssvc_manager (glusterd_svc_t *svc, void *data, int flags)
3604df
                         goto out;
3604df
         }
3604df
 out:
3604df
+        if (ret)
3604df
+                gf_event (EVENT_SVC_MANAGER_FAILED, "svc_name=%s", svc->name);
3604df
+
3604df
         gf_msg_debug (THIS->name, 0, "Returning %d", ret);
3604df
 
3604df
         return ret;
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-op-sm.c b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
3604df
index 409a205..d138e81 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-op-sm.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-op-sm.c
3604df
@@ -2195,8 +2195,13 @@ glusterd_stop_bricks (glusterd_volinfo_t *volinfo)
3604df
         cds_list_for_each_entry (brickinfo, &volinfo->bricks, brick_list) {
3604df
             /*TODO: Need to change @del_brick in brick_stop to _gf_true
3604df
              * once we enable synctask in peer rpc prog */
3604df
-                if (glusterd_brick_stop (volinfo, brickinfo, _gf_false))
3604df
+                if (glusterd_brick_stop (volinfo, brickinfo, _gf_false)) {
3604df
+                        gf_event (EVENT_BRICK_STOP_FAILED,
3604df
+                                  "peer=%s;volume=%s;brick=%s",
3604df
+                                  brickinfo->hostname, volinfo->volname,
3604df
+                                  brickinfo->path);
3604df
                         return -1;
3604df
+                }
3604df
         }
3604df
 
3604df
         return 0;
3604df
@@ -2218,6 +2223,10 @@ glusterd_start_bricks (glusterd_volinfo_t *volinfo)
3604df
                                 "Failed to start %s:%s for %s",
3604df
                                 brickinfo->hostname, brickinfo->path,
3604df
                                 volinfo->volname);
3604df
+                        gf_event (EVENT_BRICK_START_FAILED,
3604df
+                                  "peer=%s;volume=%s;brick=%s",
3604df
+                                  brickinfo->hostname, volinfo->volname,
3604df
+                                  brickinfo->path);
3604df
                         goto out;
3604df
                 }
3604df
         }
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-pmap.c b/xlators/mgmt/glusterd/src/glusterd-pmap.c
3604df
index 377d206..2698160 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-pmap.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-pmap.c
3604df
@@ -217,7 +217,7 @@ pmap_assign_port (xlator_t *this, int old_port, const char *path)
3604df
                                             GF_PMAP_PORT_BRICKSERVER, NULL);
3604df
                 if (ret) {
3604df
                         gf_msg (this->name, GF_LOG_WARNING,
3604df
-                                GD_MSG_PMAP_REGISTRY_REMOVE_FAIL, 0, "Failed toi"
3604df
+                                GD_MSG_PMAP_REGISTRY_REMOVE_FAIL, 0, "Failed to"
3604df
                                 "remove pmap registry for older signin for path"
3604df
                                 " %s", path);
3604df
                 }
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c b/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
3604df
index f3475a3..3c457be 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-quotad-svc.c
3604df
@@ -108,6 +108,9 @@ glusterd_quotadsvc_manager (glusterd_svc_t *svc, void *data, int flags)
3604df
                 }
3604df
         }
3604df
 out:
3604df
+        if (ret)
3604df
+                gf_event (EVENT_SVC_MANAGER_FAILED, "svc_name=%s", svc->name);
3604df
+
3604df
         gf_msg_debug (THIS->name, 0, "Returning %d", ret);
3604df
 
3604df
         return ret;
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-rebalance.c b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
3604df
index 9ecbdfb..67d1c82 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-rebalance.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-rebalance.c
3604df
@@ -1124,10 +1124,13 @@ glusterd_defrag_event_notify_handle (dict_t *dict)
3604df
 
3604df
         ret = glusterd_defrag_volume_status_update (volinfo, dict);
3604df
 
3604df
-        if (ret)
3604df
+        if (ret) {
3604df
                 gf_msg (this->name, GF_LOG_ERROR, 0,
3604df
                         GD_MSG_DEFRAG_STATUS_UPDATE_FAIL,
3604df
                         "Failed to update status");
3604df
+                gf_event (EVENT_DEFRAG_STATUS_UPDATE_FAILED, "volume=%s",
3604df
+                          volinfo->volname);
3604df
+        }
3604df
 
3604df
 out:
3604df
         return ret;
3604df
diff --git a/xlators/mgmt/glusterd/src/glusterd-svc-helper.c b/xlators/mgmt/glusterd/src/glusterd-svc-helper.c
3604df
index 44ee6d0..72f0092 100644
3604df
--- a/xlators/mgmt/glusterd/src/glusterd-svc-helper.c
3604df
+++ b/xlators/mgmt/glusterd/src/glusterd-svc-helper.c
3604df
@@ -52,11 +52,13 @@ glusterd_svcs_reconfigure ()
3604df
         ret = glusterd_bitdsvc_reconfigure ();
3604df
         if (ret)
3604df
                 goto out;
3604df
-
3604df
         ret = glusterd_scrubsvc_reconfigure ();
3604df
         if (ret)
3604df
                 goto out;
3604df
 out:
3604df
+        if (ret)
3604df
+                gf_event (EVENT_SVC_RECONFIGURE_FAILED, "");
3604df
+
3604df
         return ret;
3604df
 }
3604df
 
3604df
-- 
3604df
1.7.1
3604df