diff options
author | Dan Lambright <dlambrig@redhat.com> | 2016-03-01 15:03:54 -0500 |
---|---|---|
committer | Dan Lambright <dlambrig@redhat.com> | 2016-03-16 23:12:04 -0700 |
commit | adbce4e9b7dadc226d3de326d98007ed10913919 (patch) | |
tree | b45232da1fc176e3ceef08c6cf0f015a2c237bbb /xlators/cluster/dht | |
parent | 8fda324df01b6de9c58a1395263ce9755465b26d (diff) | |
download | glusterfs-adbce4e9b7dadc226d3de326d98007ed10913919.tar.gz glusterfs-adbce4e9b7dadc226d3de326d98007ed10913919.tar.xz glusterfs-adbce4e9b7dadc226d3de326d98007ed10913919.zip |
cluster/tier: add tunable to migrate files based on size
This fix adds a paramater "tier-max_promote_size" to control wether
a file is migrated or not based on its size. By default the value
is 0, meaning all files are migrated. If set to a non-zero
value, files larger than the parameter won't be moved
in tiered volumes.
Change-Id: Ia6b88e9b2508935bef500d956f9192e59670fe00
BUG: 1313495
Signed-off-by: Dan Lambright <dlambrig@redhat.com>
Reviewed-on: http://review.gluster.org/13570
Smoke: Gluster Build System <jenkins@build.gluster.com>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Joseph Fernandes
Diffstat (limited to 'xlators/cluster/dht')
-rw-r--r-- | xlators/cluster/dht/src/dht-common.h | 1 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-shared.c | 4 | ||||
-rw-r--r-- | xlators/cluster/dht/src/tier.c | 24 |
3 files changed, 29 insertions, 0 deletions
diff --git a/xlators/cluster/dht/src/dht-common.h b/xlators/cluster/dht/src/dht-common.h index d9b52e28bb..6ba94ec881 100644 --- a/xlators/cluster/dht/src/dht-common.h +++ b/xlators/cluster/dht/src/dht-common.h @@ -357,6 +357,7 @@ typedef struct gf_tier_conf { uint64_t max_migrate_bytes; int max_migrate_files; tier_mode_t mode; + int tier_max_promote_size; int tier_promote_frequency; int tier_demote_frequency; uint64_t st_last_promoted_size; diff --git a/xlators/cluster/dht/src/dht-shared.c b/xlators/cluster/dht/src/dht-shared.c index e3e7fadca3..856819ac05 100644 --- a/xlators/cluster/dht/src/dht-shared.c +++ b/xlators/cluster/dht/src/dht-shared.c @@ -1032,6 +1032,10 @@ struct volume_options options[] = { .type = GF_OPTION_TYPE_INT, .default_value = "4000", }, + { .key = {"tier-max-promote-file-size"}, + .type = GF_OPTION_TYPE_INT, + .default_value = "0", + }, { .key = {"tier-max-files"}, .type = GF_OPTION_TYPE_INT, .default_value = "10000", diff --git a/xlators/cluster/dht/src/tier.c b/xlators/cluster/dht/src/tier.c index 007cfc60c5..b99497bc66 100644 --- a/xlators/cluster/dht/src/tier.c +++ b/xlators/cluster/dht/src/tier.c @@ -724,6 +724,17 @@ tier_migrate_using_query_file (void *_args) per_link_status = -1; goto abort; } + + if (query_cbk_args->is_promotion && + defrag->tier_conf.tier_max_promote_size && + (current.ia_size > defrag->tier_conf.tier_max_promote_size)) { + gf_msg (this->name, GF_LOG_INFO, 0, + DHT_MSG_LOG_TIER_STATUS, + "File size exceeds maxsize for promotion. "); + per_link_status = 1; + goto abort; + } + linked_inode = inode_link (loc.inode, NULL, NULL, ¤t); inode_unref (loc.inode); @@ -2079,6 +2090,7 @@ tier_init (xlator_t *this) { int ret = -1; int freq = 0; + int maxsize = 0; dht_conf_t *conf = NULL; gf_defrag_info_t *defrag = NULL; char *voldir = NULL; @@ -2130,6 +2142,14 @@ tier_init (xlator_t *this) defrag->tier_conf.is_tier = 1; ret = dict_get_int32 (this->options, + "tier-max-promote-file-size", &maxsize); + if (ret) { + maxsize = 0; + } + + defrag->tier_conf.tier_max_promote_size = maxsize; + + ret = dict_get_int32 (this->options, "tier-promote-frequency", &freq); if (ret) { freq = DEFAULT_PROMOTE_FREQ_SEC; @@ -2316,6 +2336,10 @@ tier_reconfigure (xlator_t *this, dict_t *options) if (conf->defrag) { defrag = conf->defrag; + GF_OPTION_RECONF ("tier-max-promote-file-size", + defrag->tier_conf.tier_max_promote_size, + options, int32, out); + GF_OPTION_RECONF ("tier-promote-frequency", defrag->tier_conf.tier_promote_frequency, options, int32, out); |