summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMohammed Rafi KC <rkavunga@redhat.com>2015-12-08 19:55:22 +0530
committerDan Lambright <dlambrig@redhat.com>2015-12-09 05:35:35 -0800
commitcb41de7c4a7d620dbab645f2b105286b68bde9a9 (patch)
treeca282f56f4a67e356949e40391e974cb66eebf3c
parentbcc4c12360c1a63bae5b787e519a35c32b48ae83 (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.c30
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);