diff options
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 4 | ||||
-rw-r--r-- | xlators/cluster/dht/src/tier.c | 21 |
2 files changed, 25 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index 1dfc5cddaea..a240a72444d 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.h @@ -391,6 +391,10 @@ typedef struct gf_tier_conf { int demote_in_progress; /* This Structure is only used in tiering fixlayout */ gf_tier_fix_layout_arg_t tier_fix_layout_arg; + /* Indicates the index of the first queryfile picked + * in the last cycle of promote or demote */ + int32_t last_promote_qfile_index; + int32_t last_demote_qfile_index; } gf_tier_conf_t; struct gf_defrag_info_ { diff --git a/xlators/cluster/dht/src/tier.c b/xlators/cluster/dht/src/tier.c index b99497bc66a..1484589bc47 100644 --- a/xlators/cluster/dht/src/tier.c +++ b/xlators/cluster/dht/src/tier.c @@ -1404,6 +1404,9 @@ tier_migrate_files_using_qfile (migration_args_t *comp, ssize_t qfile_array_size = 0; int count = 0; int temp_fd = 0; + gf_tier_conf_t *tier_conf = NULL; + + tier_conf = &(query_cbk_args->defrag->tier_conf); /* Time format for error query files */ gettimeofday (¤t_time, NULL); @@ -1440,6 +1443,21 @@ tier_migrate_files_using_qfile (migration_args_t *comp, count++; } + /* Moving the query file index to the next, so that we won't the same + * query file every cycle as the first one */ + query_cbk_args->qfile_array->next_index = + (query_cbk_args->is_promotion) ? + tier_conf->last_promote_qfile_index : + tier_conf->last_demote_qfile_index; + shift_next_index (query_cbk_args->qfile_array); + if (query_cbk_args->is_promotion) { + tier_conf->last_promote_qfile_index = + query_cbk_args->qfile_array->next_index; + } else { + tier_conf->last_demote_qfile_index = + query_cbk_args->qfile_array->next_index; + } + /* Migrate files using query file list */ ret = tier_migrate_using_query_file ((void *)query_cbk_args); out: @@ -2139,6 +2157,9 @@ tier_init (xlator_t *this) defrag = conf->defrag; + defrag->tier_conf.last_demote_qfile_index = 0; + defrag->tier_conf.last_promote_qfile_index = 0; + defrag->tier_conf.is_tier = 1; ret = dict_get_int32 (this->options, |