Blob Blame History Raw
From 5f467f9f83c0fe81b0f54bcd23ad1f6aa86cd548 Mon Sep 17 00:00:00 2001
From: N Balachandran <nbalacha@redhat.com>
Date: Fri, 16 Sep 2016 22:23:51 +0530
Subject: [PATCH 70/86] dht/events:  Added rebalance events

The rebalance process will now send an event when it is
complete.
Also fixed a problem where the run-time was not always
set causing spurious rebalance failure events to be sent.

> Change-Id: Ib445171c78c9560940022bca20c887d31a9bb1ca
> BUG: 1371874
> Signed-off-by: N Balachandran <nbalacha@redhat.com>
> Reviewed-on: http://review.gluster.org/15501
> Reviewed-by: Raghavendra G <rgowdapp@redhat.com>
> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>

>Reviewed-on: http://review.gluster.org/15520
>Smoke: Gluster Build System <jenkins@build.gluster.org>
>CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
>NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
>Reviewed-by: Atin Mukherjee <amukherj@redhat.com>

Change-Id: Ia24038c04548a98aac899df10414585b988caa76
BUG: 1361066
Signed-off-by: N Balachandran <nbalacha@redhat.com>
Reviewed-on: https://code.engineering.redhat.com/gerrit/84875
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Tested-by: Atin Mukherjee <amukherj@redhat.com>
---
 xlators/cluster/dht/src/dht-rebalance.c |   56 +++++++++++++++++++++++++++---
 1 files changed, 50 insertions(+), 6 deletions(-)

diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
index 58b0d74..194fbb0 100644
--- a/xlators/cluster/dht/src/dht-rebalance.c
+++ b/xlators/cluster/dht/src/dht-rebalance.c
@@ -74,6 +74,49 @@ dht_set_global_defrag_error (gf_defrag_info_t *defrag, int ret)
 }
 
 static int
+dht_send_rebalance_event (xlator_t *this, gf_defrag_status_t status)
+{
+        int ret = -1;
+        char *volname = NULL;
+        char *tmpstr  = NULL;
+
+        eventtypes_t event = EVENT_LAST;
+
+        switch (status) {
+        case GF_DEFRAG_STATUS_COMPLETE:
+                event = EVENT_VOLUME_REBALANCE_COMPLETE;
+                break;
+        case GF_DEFRAG_STATUS_FAILED:
+                event = EVENT_VOLUME_REBALANCE_FAILED;
+                break;
+        case GF_DEFRAG_STATUS_STOPPED:
+                event = EVENT_VOLUME_REBALANCE_STOP;
+                break;
+        default:
+                break;
+
+        }
+
+        tmpstr = gf_strdup (this->name);
+        if (tmpstr) {
+                volname = strtok(tmpstr, "-dht");
+        }
+
+        if (!volname)
+                volname = this->name;
+
+        if (event != EVENT_LAST) {
+                ret = gf_event (event, "volume=%s", volname);
+        }
+        GF_FREE (tmpstr);
+        return ret;
+}
+
+
+
+
+
+static int
 dht_write_with_holes (xlator_t *to, fd_t *fd, struct iovec *vec, int count,
                       int32_t size, off_t offset, struct iobref *iobref)
 {
@@ -3823,6 +3866,8 @@ out:
                 defrag->defrag_status = GF_DEFRAG_STATUS_COMPLETE;
         }
 
+        dht_send_rebalance_event (this, defrag->defrag_status);
+
         LOCK (&defrag->lock);
         {
                 status = dict_new ();
@@ -3973,12 +4018,11 @@ gf_defrag_status_get (gf_defrag_info_t *defrag, dict_t *dict)
         if (ret)
                 gf_log (THIS->name, GF_LOG_WARNING,
                         "failed to set status");
-        if (elapsed) {
-                ret = dict_set_double (dict, "run-time", elapsed);
-                if (ret)
-                        gf_log (THIS->name, GF_LOG_WARNING,
-                                "failed to set run-time");
-        }
+
+        ret = dict_set_double (dict, "run-time", elapsed);
+        if (ret)
+                gf_log (THIS->name, GF_LOG_WARNING,
+                        "failed to set run-time");
 
         ret = dict_set_uint64 (dict, "failures", failures);
         if (ret)
-- 
1.7.1