diff options
author | Dan Lambright <dlambrig@redhat.com> | 2015-04-13 02:42:12 +0100 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-05-09 08:35:14 -0700 |
commit | 99b778cbe179104af602b6eedebd31695bec16ae (patch) | |
tree | 5352721732f773b117b4a1c771577cedfaf329f4 /xlators/cluster/dht/src/tier.c | |
parent | 5fd6b3b7e2881d21a1b19fb22366e905314d71bc (diff) |
glusterd: support for tier volumes 'detach start' and 'detach commit'
Back port of http://review.gluster.org/10108
These commands work in a manner analagous to rebalancing when removing a
brick. The existing migration daemon detects "detach start" and switches
to moving data off the hot tier. While in this state all lookups are
directed to the cold tier.
gluster v detach-tier <vol> start
gluster v detach-tier <vol> commit
The status and stop cli commands shall be submitted separately.
>Change-Id: I24fda5cc3ba74f5fb8aa9a3234ad51f18b80a8a0
>BUG: 1205540
>Signed-off-by: Dan Lambright <dlambrig@redhat.com>
>Signed-off-by: root <root@localhost.localdomain>
>Signed-off-by: Dan Lambright <dlambrig@redhat.com>
>Reviewed-on: http://review.gluster.org/10108
>Reviewed-by: Kaleb KEITHLEY <kkeithle@redhat.com>
Change-Id: I212d748d077fb5870ee84b316c653acbafbea3f7
BUG: 1220047
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
Reviewed-on: http://review.gluster.org/10708
Reviewed-by: Dan Lambright <dlambrig@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/dht/src/tier.c')
-rw-r--r-- | xlators/cluster/dht/src/tier.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/xlators/cluster/dht/src/tier.c b/xlators/cluster/dht/src/tier.c index 48604374aa7..92d13f4f04b 100644 --- a/xlators/cluster/dht/src/tier.c +++ b/xlators/cluster/dht/src/tier.c @@ -812,6 +812,15 @@ tier_start (xlator_t *this, gf_defrag_info_t *defrag) goto out; } + if (defrag->cmd == GF_DEFRAG_CMD_START_DETACH_TIER) { + ret = 1; + gf_msg (this->name, GF_LOG_ERROR, 0, + DHT_MSG_LOG_TIER_ERROR, + "defrag->defrag_cmd == " + "GF_DEFRAG_CMD_START_DETACH_TIER"); + goto out; + } + tick = (tick + 1) % TIMER_SECS; if ((next_demote != tick) && (next_promote != tick)) continue; @@ -911,15 +920,19 @@ tier_migration_get_dst (xlator_t *this, dht_local_t *local) { dht_conf_t *conf = NULL; int32_t ret = -1; + gf_defrag_info_t *defrag = NULL; GF_VALIDATE_OR_GOTO("tier", this, out); GF_VALIDATE_OR_GOTO(this->name, this->private, out); conf = this->private; - if (!conf) - goto out; - if (conf->subvolumes[0] == local->cached_subvol) + defrag = conf->defrag; + + if (defrag && defrag->cmd == GF_DEFRAG_CMD_START_DETACH_TIER) { + local->rebalance.target_node = conf->subvolumes[0]; + + } else if (conf->subvolumes[0] == local->cached_subvol) local->rebalance.target_node = conf->subvolumes[1]; else @@ -936,16 +949,25 @@ out: xlator_t * tier_search (xlator_t *this, dht_layout_t *layout, const char *name) { - xlator_t *subvol = NULL; - void *value; - int search_first_subvol = 0; + xlator_t *subvol = NULL; + void *value; + int search_first_subvol = 0; + dht_conf_t *conf = NULL; + gf_defrag_info_t *defrag = NULL; GF_VALIDATE_OR_GOTO("tier", this, out); GF_VALIDATE_OR_GOTO(this->name, layout, out); GF_VALIDATE_OR_GOTO(this->name, name, out); + GF_VALIDATE_OR_GOTO(this->name, this->private, out); + + conf = this->private; + + defrag = conf->defrag; + if (defrag && defrag->cmd == GF_DEFRAG_CMD_START_DETACH_TIER) + search_first_subvol = 1; - if (!dict_get_ptr (this->options, "rule", &value) && - !strcmp(layout->list[0].xlator->name, value)) { + else if (!dict_get_ptr (this->options, "rule", &value) && + !strcmp(layout->list[0].xlator->name, value)) { search_first_subvol = 1; } |