|
|
3604df |
From 0801dda0347556d6a933c44016ef789a370b8586 Mon Sep 17 00:00:00 2001
|
|
|
3604df |
From: N Balachandran <nbalacha@redhat.com>
|
|
|
3604df |
Date: Wed, 26 Oct 2016 09:25:47 +0530
|
|
|
3604df |
Subject: [PATCH 143/157] cluster/dht: Incorrect volname in rebalance events
|
|
|
3604df |
|
|
|
3604df |
The rebalance event code was using strtok to parse the
|
|
|
3604df |
volume name which is incorrect.
|
|
|
3604df |
Reworked the code to get the correct volume name using
|
|
|
3604df |
strstr.
|
|
|
3604df |
|
|
|
3604df |
Upstream patches:
|
|
|
3604df |
master: http://review.gluster.org/15712
|
|
|
3604df |
release-3.9: http://review.gluster.org/#/c/15725/
|
|
|
3604df |
|
|
|
3604df |
Change-Id: I7c00445bafe08034f77c422d2f60ac3252c7afd6
|
|
|
3604df |
BUG: 1386472
|
|
|
3604df |
Signed-off-by: N Balachandran <nbalacha@redhat.com>
|
|
|
3604df |
Reviewed-on: https://code.engineering.redhat.com/gerrit/88228
|
|
|
3604df |
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
3604df |
Tested-by: Atin Mukherjee <amukherj@redhat.com>
|
|
|
3604df |
---
|
|
|
3604df |
xlators/cluster/dht/src/dht-rebalance.c | 56 +++++++++++++++++++++++++++---
|
|
|
3604df |
1 files changed, 50 insertions(+), 6 deletions(-)
|
|
|
3604df |
|
|
|
3604df |
diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c
|
|
|
3604df |
index 194fbb0..5d28e0a 100644
|
|
|
3604df |
--- a/xlators/cluster/dht/src/dht-rebalance.c
|
|
|
3604df |
+++ b/xlators/cluster/dht/src/dht-rebalance.c
|
|
|
3604df |
@@ -73,12 +73,40 @@ dht_set_global_defrag_error (gf_defrag_info_t *defrag, int ret)
|
|
|
3604df |
return;
|
|
|
3604df |
}
|
|
|
3604df |
|
|
|
3604df |
+
|
|
|
3604df |
+static gf_boolean_t
|
|
|
3604df |
+dht_is_tier_command (int cmd) {
|
|
|
3604df |
+
|
|
|
3604df |
+ gf_boolean_t is_tier = _gf_false;
|
|
|
3604df |
+
|
|
|
3604df |
+ switch (cmd) {
|
|
|
3604df |
+ case GF_DEFRAG_CMD_START_TIER:
|
|
|
3604df |
+ case GF_DEFRAG_CMD_STATUS_TIER:
|
|
|
3604df |
+ case GF_DEFRAG_CMD_START_DETACH_TIER:
|
|
|
3604df |
+ case GF_DEFRAG_CMD_STOP_DETACH_TIER:
|
|
|
3604df |
+ case GF_DEFRAG_CMD_PAUSE_TIER:
|
|
|
3604df |
+ case GF_DEFRAG_CMD_RESUME_TIER:
|
|
|
3604df |
+ is_tier = _gf_true;
|
|
|
3604df |
+ break;
|
|
|
3604df |
+ default:
|
|
|
3604df |
+ break;
|
|
|
3604df |
+ }
|
|
|
3604df |
+ return is_tier;
|
|
|
3604df |
+
|
|
|
3604df |
+}
|
|
|
3604df |
+
|
|
|
3604df |
+
|
|
|
3604df |
static int
|
|
|
3604df |
-dht_send_rebalance_event (xlator_t *this, gf_defrag_status_t status)
|
|
|
3604df |
+dht_send_rebalance_event (xlator_t *this, int cmd, gf_defrag_status_t status)
|
|
|
3604df |
{
|
|
|
3604df |
int ret = -1;
|
|
|
3604df |
char *volname = NULL;
|
|
|
3604df |
char *tmpstr = NULL;
|
|
|
3604df |
+ char *ptr = NULL;
|
|
|
3604df |
+ char *suffix = "-dht";
|
|
|
3604df |
+ dht_conf_t *conf = NULL;
|
|
|
3604df |
+ gf_defrag_info_t *defrag = NULL;
|
|
|
3604df |
+ int len = 0;
|
|
|
3604df |
|
|
|
3604df |
eventtypes_t event = EVENT_LAST;
|
|
|
3604df |
|
|
|
3604df |
@@ -97,17 +125,33 @@ dht_send_rebalance_event (xlator_t *this, gf_defrag_status_t status)
|
|
|
3604df |
|
|
|
3604df |
}
|
|
|
3604df |
|
|
|
3604df |
- tmpstr = gf_strdup (this->name);
|
|
|
3604df |
- if (tmpstr) {
|
|
|
3604df |
- volname = strtok(tmpstr, "-dht");
|
|
|
3604df |
+ if (dht_is_tier_command (cmd)) {
|
|
|
3604df |
+ /* We should have the tier volume name*/
|
|
|
3604df |
+ conf = this->private;
|
|
|
3604df |
+ defrag = conf->defrag;
|
|
|
3604df |
+ volname = defrag->tier_conf.volname;
|
|
|
3604df |
+ } else {
|
|
|
3604df |
+ /* DHT volume */
|
|
|
3604df |
+ len = strlen (this->name);
|
|
|
3604df |
+ tmpstr = gf_strdup (this->name);
|
|
|
3604df |
+ if (tmpstr) {
|
|
|
3604df |
+ ptr = tmpstr + (len - strlen (suffix));
|
|
|
3604df |
+ if (!strcmp (ptr, suffix)) {
|
|
|
3604df |
+ tmpstr[len - strlen (suffix)] = '\0';
|
|
|
3604df |
+ volname = tmpstr;
|
|
|
3604df |
+ }
|
|
|
3604df |
+ }
|
|
|
3604df |
}
|
|
|
3604df |
|
|
|
3604df |
- if (!volname)
|
|
|
3604df |
+ if (!volname) {
|
|
|
3604df |
+ /* Better than nothing */
|
|
|
3604df |
volname = this->name;
|
|
|
3604df |
+ }
|
|
|
3604df |
|
|
|
3604df |
if (event != EVENT_LAST) {
|
|
|
3604df |
ret = gf_event (event, "volume=%s", volname);
|
|
|
3604df |
}
|
|
|
3604df |
+
|
|
|
3604df |
GF_FREE (tmpstr);
|
|
|
3604df |
return ret;
|
|
|
3604df |
}
|
|
|
3604df |
@@ -3866,7 +3910,7 @@ out:
|
|
|
3604df |
defrag->defrag_status = GF_DEFRAG_STATUS_COMPLETE;
|
|
|
3604df |
}
|
|
|
3604df |
|
|
|
3604df |
- dht_send_rebalance_event (this, defrag->defrag_status);
|
|
|
3604df |
+ dht_send_rebalance_event (this, defrag->cmd, defrag->defrag_status);
|
|
|
3604df |
|
|
|
3604df |
LOCK (&defrag->lock);
|
|
|
3604df |
{
|
|
|
3604df |
--
|
|
|
3604df |
1.7.1
|
|
|
3604df |
|