diff options
Diffstat (limited to 'xlators/cluster')
-rw-r--r-- | 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 170fb102462..e41a59e7bfc 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -73,12 +73,40 @@ dht_set_global_defrag_error (gf_defrag_info_t *defrag, int ret) return; } + +static gf_boolean_t +dht_is_tier_command (int cmd) { + + gf_boolean_t is_tier = _gf_false; + + switch (cmd) { + case GF_DEFRAG_CMD_START_TIER: + case GF_DEFRAG_CMD_STATUS_TIER: + case GF_DEFRAG_CMD_START_DETACH_TIER: + case GF_DEFRAG_CMD_STOP_DETACH_TIER: + case GF_DEFRAG_CMD_PAUSE_TIER: + case GF_DEFRAG_CMD_RESUME_TIER: + is_tier = _gf_true; + break; + default: + break; + } + return is_tier; + +} + + static int -dht_send_rebalance_event (xlator_t *this, gf_defrag_status_t status) +dht_send_rebalance_event (xlator_t *this, int cmd, gf_defrag_status_t status) { int ret = -1; char *volname = NULL; char *tmpstr = NULL; + char *ptr = NULL; + char *suffix = "-dht"; + dht_conf_t *conf = NULL; + gf_defrag_info_t *defrag = NULL; + int len = 0; eventtypes_t event = EVENT_LAST; @@ -97,17 +125,33 @@ dht_send_rebalance_event (xlator_t *this, gf_defrag_status_t status) } - tmpstr = gf_strdup (this->name); - if (tmpstr) { - volname = strtok(tmpstr, "-dht"); + if (dht_is_tier_command (cmd)) { + /* We should have the tier volume name*/ + conf = this->private; + defrag = conf->defrag; + volname = defrag->tier_conf.volname; + } else { + /* DHT volume */ + len = strlen (this->name); + tmpstr = gf_strdup (this->name); + if (tmpstr) { + ptr = tmpstr + (len - strlen (suffix)); + if (!strcmp (ptr, suffix)) { + tmpstr[len - strlen (suffix)] = '\0'; + volname = tmpstr; + } + } } - if (!volname) + if (!volname) { + /* Better than nothing */ volname = this->name; + } if (event != EVENT_LAST) { ret = gf_event (event, "volume=%s", volname); } + GF_FREE (tmpstr); return ret; } @@ -3873,7 +3917,7 @@ out: defrag->defrag_status = GF_DEFRAG_STATUS_COMPLETE; } - dht_send_rebalance_event (this, defrag->defrag_status); + dht_send_rebalance_event (this, defrag->cmd, defrag->defrag_status); LOCK (&defrag->lock); { |