summaryrefslogtreecommitdiffstats
path: root/xlators/cluster
diff options
context:
space:
mode:
Diffstat (limited to 'xlators/cluster')
-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 6a717678ba4..bc7390b8b40 100644
--- a/xlators/cluster/dht/src/dht-common.c
+++ b/xlators/cluster/dht/src/dht-common.c
@@ -6038,6 +6038,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,
@@ -6058,9 +6079,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);