diff options
author | Mohammed Rafi KC <rkavunga@redhat.com> | 2015-12-08 19:55:22 +0530 |
---|---|---|
committer | Dan Lambright <dlambrig@redhat.com> | 2015-12-09 05:35:35 -0800 |
commit | cb41de7c4a7d620dbab645f2b105286b68bde9a9 (patch) | |
tree | ca282f56f4a67e356949e40391e974cb66eebf3c | |
parent | bcc4c12360c1a63bae5b787e519a35c32b48ae83 (diff) |
tier/dht: files are still going to decommissioned subvol
After detach tier start, creates are still going to hot
tier. Because when creating data files we are not checking for
decommissioned bricks.
Change-Id: I8e28258d9b2367dcc8ad6e5e91d0e54d92fdf771
BUG: 1289602
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
Reviewed-on: http://review.gluster.org/12914
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Dan Lambright <dlambrig@redhat.com>
Tested-by: Dan Lambright <dlambrig@redhat.com>
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 30 |
1 files changed, 27 insertions, 3 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index f9ea97f000a..ee07a7f4f71 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -6036,6 +6036,27 @@ err: return 0; } +gf_boolean_t +dht_is_hot_tier_decommissioned (xlator_t *this) +{ + dht_conf_t *conf = NULL; + xlator_t *hot_tier = NULL; + int i = 0; + + conf = this->private; + hot_tier = conf->subvolumes[1]; + + if (conf->decommission_subvols_cnt) { + for (i = 0; i < conf->subvolume_cnt; i++) { + if (conf->decommissioned_bricks[i] && + conf->decommissioned_bricks[i] == hot_tier) + return _gf_true; + } + } + + return _gf_false; +} + int dht_create_tier_wind_to_avail_subvol (call_frame_t *frame, xlator_t *this, xlator_t *subvol, loc_t *loc, int32_t flags, @@ -6056,9 +6077,12 @@ dht_create_tier_wind_to_avail_subvol (call_frame_t *frame, xlator_t *this, if (conf->subvolumes[0] != cold_subvol) { hot_subvol = conf->subvolumes[0]; } - - /* if hot tier full, write to cold */ - if (dht_is_subvol_filled (this, hot_subvol)) { + /* + * if hot tier full, write to cold. + * Also if hot tier is full, create in cold + */ + if (dht_is_subvol_filled (this, hot_subvol) || + dht_is_hot_tier_decommissioned (this)) { gf_msg_debug (this->name, 0, "creating %s on %s", loc->path, cold_subvol->name); |