diff options
author | Amar Tumballi <amarts@redhat.com> | 2018-10-03 17:00:24 +0530 |
---|---|---|
committer | Atin Mukherjee <amukherj@redhat.com> | 2018-11-02 02:39:35 +0000 |
commit | 55a6ba56bea9ec0d3316c005300c514ea3ab0e54 (patch) | |
tree | 0d36d876e25b158858805b682d01bb5207a4f08e /xlators | |
parent | 6e8f7bb6ab457cfee42e405243cf4db82a9a56b8 (diff) |
tiering: remove the translator from build and glusterd
Based on the proposal to remove few features as they are not
actively maintained [1], removing tier translator from the
build. Also make sure there are no regression tests involving
tiering feature are present.
[1] https://lists.gluster.org/pipermail/gluster-users/2018-July/034400.html
Change-Id: I2c177f711f9b54b7b24e1a13525ff3132bd9a9c5
updates: bz#1642807
Signed-off-by: Amar Tumballi <amarts@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/cluster/dht/src/Makefile.am | 18 | ||||
-rw-r--r-- | xlators/cluster/dht/src/dht-rebalance.c | 12 | ||||
-rw-r--r-- | xlators/features/Makefile.am | 2 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 75 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 723 |
5 files changed, 4 insertions, 826 deletions
diff --git a/xlators/cluster/dht/src/Makefile.am b/xlators/cluster/dht/src/Makefile.am index 7cb2961f30a..caeb17b0f07 100644 --- a/xlators/cluster/dht/src/Makefile.am +++ b/xlators/cluster/dht/src/Makefile.am @@ -1,7 +1,4 @@ xlator_LTLIBRARIES = dht.la nufa.la switch.la -if BUILD_GFDB - xlator_LTLIBRARIES += tier.la -endif AM_CFLAGS = -Wall $(GF_CFLAGS) @@ -16,7 +13,6 @@ dht_la_SOURCES = $(dht_common_source) dht.c nufa_la_SOURCES = $(dht_common_source) nufa.c switch_la_SOURCES = $(dht_common_source) switch.c -tier_la_SOURCES = $(dht_common_source) tier.c tier-common.c dht_la_LDFLAGS = -module \ -export-symbols $(top_srcdir)/xlators/cluster/dht/src/dht.sym \ @@ -33,27 +29,19 @@ switch_la_LDFLAGS = -module \ $(GF_XLATOR_LDFLAGS) switch_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la -tier_la_LDFLAGS = -module \ - -export-symbols $(top_srcdir)/xlators/cluster/dht/src/tier.sym \ - $(LIB_DL) $(GF_XLATOR_LDFLAGS) -tier_la_LIBADD = $(top_builddir)/libglusterfs/src/libglusterfs.la - noinst_HEADERS = dht-common.h dht-mem-types.h dht-messages.h \ - dht-lock.h tier-common.h tier.h \ - $(top_builddir)/xlators/lib/src/libxlator.h + dht-lock.h $(top_builddir)/xlators/lib/src/libxlator.h AM_CPPFLAGS = $(GF_CPPFLAGS) -I$(top_srcdir)/libglusterfs/src \ - -I$(top_srcdir)/libglusterfs/src/gfdb \ -I$(top_srcdir)/rpc/xdr/src -I$(top_builddir)/rpc/xdr/src \ -I$(top_srcdir)/rpc/rpc-lib/src \ -I$(top_srcdir)/xlators/lib/src \ -DDATADIR=\"$(localstatedir)\" \ - -DLIBDIR=\"$(libdir)\" \ - -DLIBGFDB_VERSION=\"$(LIBGFDB_VERSION)\" + -DLIBDIR=\"$(libdir)\" CLEANFILES = -EXTRA_DIST = dht.sym nufa.sym switch.sym tier.sym +EXTRA_DIST = dht.sym nufa.sym switch.sym uninstall-local: rm -f $(DESTDIR)$(xlatordir)/distribute.so diff --git a/xlators/cluster/dht/src/dht-rebalance.c b/xlators/cluster/dht/src/dht-rebalance.c index 0b85ac9ae15..41a587823a9 100644 --- a/xlators/cluster/dht/src/dht-rebalance.c +++ b/xlators/cluster/dht/src/dht-rebalance.c @@ -8,7 +8,6 @@ cases as published by the Free Software Foundation. */ -#include "tier.h" #include "dht-common.h" #include "xlator.h" #include "syscall.h" @@ -2135,17 +2134,6 @@ dht_migrate_file(xlator_t *this, loc_t *loc, xlator_t *from, xlator_t *to, } } - /* store size of previous migrated file */ - if (defrag && defrag->tier_conf.is_tier) { - if (from != TIER_HASHED_SUBVOL) { - defrag->tier_conf.st_last_promoted_size = stbuf.ia_size; - } else { - /* Don't delete the linkto file on the hashed subvol */ - delete_src_linkto = _gf_false; - defrag->tier_conf.st_last_demoted_size = stbuf.ia_size; - } - } - /* The src file is being unlinked after this so we don't need to clean it up */ clean_src = _gf_false; diff --git a/xlators/features/Makefile.am b/xlators/features/Makefile.am index 6ef19af0860..7a423bf4b20 100644 --- a/xlators/features/Makefile.am +++ b/xlators/features/Makefile.am @@ -4,7 +4,7 @@ endif SUBDIRS = locks quota read-only quiesce marker index barrier \ - arbiter compress changelog changetimerecorder \ + arbiter compress changelog \ gfid-access $(GLUPY_SUBDIR) upcall snapview-client snapview-server \ trash shard bit-rot leases selinux sdfs namespace $(CLOUDSYNC_DIR) thin-arbiter \ utime diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 57b0fccac3b..b7c658e19fc 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -1856,78 +1856,6 @@ out: return ret; } -#if USE_GFDB /* only add changetimerecorder when GFDB is enabled */ -static int -brick_graph_add_changetimerecorder(volgen_graph_t *graph, - glusterd_volinfo_t *volinfo, - dict_t *set_dict, - glusterd_brickinfo_t *brickinfo) -{ - xlator_t *xl = NULL; - int ret = -1; - char *brickname = NULL; - char *path = NULL; - char index_basepath[PATH_MAX] = {0}; - char *hotbrick = NULL; - - if (!graph || !volinfo || !set_dict || !brickinfo) - goto out; - - path = brickinfo->path; - - xl = volgen_graph_add(graph, "features/changetimerecorder", - volinfo->volname); - if (!xl) - goto out; - - ret = xlator_set_option(xl, "db-type", "sqlite3"); - if (ret) - goto out; - - if (!set_dict || dict_get_str(set_dict, "hot-brick", &hotbrick)) - hotbrick = "off"; - - ret = xlator_set_option(xl, "hot-brick", hotbrick); - if (ret) - goto out; - - brickname = strrchr(path, '/') + 1; - snprintf(index_basepath, sizeof(index_basepath), "%s.db", brickname); - ret = xlator_set_option(xl, "db-name", index_basepath); - if (ret) - goto out; - - snprintf(index_basepath, sizeof(index_basepath), "%s/%s", path, - ".glusterfs/"); - ret = xlator_set_option(xl, "db-path", index_basepath); - if (ret) - goto out; - - ret = xlator_set_option(xl, "record-exit", "off"); - if (ret) - goto out; - - ret = xlator_set_option(xl, "ctr_link_consistency", "off"); - if (ret) - goto out; - - ret = xlator_set_option(xl, "ctr_lookupheal_link_timeout", "300"); - if (ret) - goto out; - - ret = xlator_set_option(xl, "ctr_lookupheal_inode_timeout", "300"); - if (ret) - goto out; - - ret = xlator_set_option(xl, "record-entry", "on"); - if (ret) - goto out; - -out: - return ret; -} -#endif /* USE_GFDB */ - static int brick_graph_add_acl(volgen_graph_t *graph, glusterd_volinfo_t *volinfo, dict_t *set_dict, glusterd_brickinfo_t *brickinfo) @@ -2684,9 +2612,6 @@ static volgen_brick_xlator_t server_graph_table[] = { {brick_graph_add_acl, "acl"}, {brick_graph_add_bitrot_stub, "bitrot-stub"}, {brick_graph_add_changelog, "changelog"}, -#if USE_GFDB /* changetimerecorder depends on gfdb */ - {brick_graph_add_changetimerecorder, "changetimerecorder"}, -#endif {brick_graph_add_bd, "bd"}, {brick_graph_add_trash, "trash"}, {brick_graph_add_arbiter, "arbiter"}, diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index 988d547e14e..ac1e011043d 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -11,474 +11,6 @@ cases as published by the Free Software Foundation. #include "glusterd-volgen.h" #include "glusterd-utils.h" -#if USE_GFDB /* no GFDB means tiering is disabled */ - -static int -get_tier_freq_threshold(glusterd_volinfo_t *volinfo, char *threshold_key) -{ - int threshold = 0; - char *str_thresold = NULL; - int ret = -1; - xlator_t *this = NULL; - - this = THIS; - GF_ASSERT(this); - - glusterd_volinfo_get(volinfo, threshold_key, &str_thresold); - if (str_thresold) { - ret = gf_string2int(str_thresold, &threshold); - if (ret == -1) { - threshold = ret; - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "Failed to convert " - "string to integer"); - } - } - - return threshold; -} - -/* - * Validation function for record-counters - * if write-freq-threshold and read-freq-threshold both have non-zero values - * record-counters cannot be set to off - * if record-counters is set to on - * check if both the frequency thresholds are zero, then pop - * a note, but volume set is not failed. - * */ -static int -validate_tier_counters(glusterd_volinfo_t *volinfo, dict_t *dict, char *key, - char *value, char **op_errstr) -{ - char errstr[2048] = ""; - int ret = -1; - xlator_t *this = NULL; - gf_boolean_t origin_val = -1; - int current_wt = 0; - int current_rt = 0; - - this = THIS; - GF_ASSERT(this); - - if (volinfo->type != GF_CLUSTER_TYPE_TIER) { - snprintf(errstr, sizeof(errstr), - "Volume %s is not a tier " - "volume. Option %s is only valid for tier volume.", - volinfo->volname, key); - goto out; - } - - ret = gf_string2boolean(value, &origin_val); - if (ret) { - snprintf(errstr, sizeof(errstr), - "%s is not a compatible " - "value. %s expects an boolean value", - value, key); - goto out; - } - - current_rt = get_tier_freq_threshold(volinfo, - "cluster.read-freq-threshold"); - if (current_rt == -1) { - snprintf(errstr, sizeof(errstr), - " Failed to retrieve value" - " of cluster.read-freq-threshold"); - goto out; - } - current_wt = get_tier_freq_threshold(volinfo, - "cluster.write-freq-threshold"); - if (current_wt == -1) { - snprintf(errstr, sizeof(errstr), - " Failed to retrieve value " - "of cluster.write-freq-threshold"); - goto out; - } - /* If record-counters is set to off */ - if (!origin_val) { - /* Both the thresholds should be zero to set - * record-counters to off*/ - if (current_rt || current_wt) { - snprintf(errstr, sizeof(errstr), - "Cannot set features.record-counters to \"%s\"" - " as cluster.write-freq-threshold is %d" - " and cluster.read-freq-threshold is %d. Please" - " set both cluster.write-freq-threshold and " - " cluster.read-freq-threshold to 0, to set " - " features.record-counters to \"%s\".", - value, current_wt, current_rt, value); - ret = -1; - goto out; - } - } - /* TODO give a warning message to the user. errstr without re = -1 will - * not result in a warning on cli for now. - else { - if (!current_rt && !current_wt) { - snprintf (errstr, sizeof (errstr), - " Note : cluster.write-freq-threshold is %d" - " and cluster.read-freq-threshold is %d. Please" - " set both cluster.write-freq-threshold and " - " cluster.read-freq-threshold to" - " appropriate positive values.", - current_wt, current_rt); - } - }*/ - - ret = 0; -out: - - if (ret) { - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - } - - return ret; -} - -/* - * Validation function for ctr sql params - * features.ctr-sql-db-cachesize (Range: 1000 to 262144 pages) - * features.ctr-sql-db-wal-autocheckpoint (Range: 1000 to 262144 pages) - * */ -static int -validate_ctr_sql_params(glusterd_volinfo_t *volinfo, dict_t *dict, char *key, - char *value, char **op_errstr) -{ - int ret = -1; - xlator_t *this = NULL; - char errstr[2048] = ""; - int origin_val = -1; - - this = THIS; - GF_ASSERT(this); - - ret = gf_string2int(value, &origin_val); - if (ret) { - snprintf(errstr, sizeof(errstr), - "%s is not a compatible " - "value. %s expects an integer value.", - value, key); - ret = -1; - goto out; - } - - if (origin_val < 0) { - snprintf(errstr, sizeof(errstr), - "%s is not a " - "compatible value. %s expects a positive" - "integer value.", - value, key); - ret = -1; - goto out; - } - - if (strstr(key, "sql-db-cachesize") || - strstr(key, "sql-db-wal-autocheckpoint")) { - if ((origin_val < 1000) || (origin_val > 262144)) { - snprintf(errstr, sizeof(errstr), - "%s is not a " - "compatible value. %s " - "expects a value between : " - "1000 to 262144.", - value, key); - ret = -1; - goto out; - } - } - - ret = 0; -out: - if (ret) { - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - } - return ret; -} - -/* Validation for tiering frequency thresholds - * If any of the frequency thresholds are set to a non-zero value, - * switch record-counters on, if not already on - * If both the frequency thresholds are set to zero, - * switch record-counters off, if not already off - * */ -static int -validate_tier_thresholds(glusterd_volinfo_t *volinfo, dict_t *dict, char *key, - char *value, char **op_errstr) -{ - char errstr[2048] = ""; - int ret = -1; - xlator_t *this = NULL; - int origin_val = -1; - gf_boolean_t current_rc = _gf_false; - int current_wt = 0; - int current_rt = 0; - gf_boolean_t is_set_rc = _gf_false; - char *proposed_rc = NULL; - - this = THIS; - GF_ASSERT(this); - - if (volinfo->type != GF_CLUSTER_TYPE_TIER) { - snprintf(errstr, sizeof(errstr), - "Volume %s is not a tier " - "volume. Option %s is only valid for tier volume.", - volinfo->volname, key); - goto out; - } - - ret = gf_string2int(value, &origin_val); - if (ret) { - snprintf(errstr, sizeof(errstr), - "%s is not a compatible " - "value. %s expects an integer value.", - value, key); - ret = -1; - goto out; - } - - if (origin_val < 0) { - snprintf(errstr, sizeof(errstr), - "%s is not a " - "compatible value. %s expects a positive" - "integer value.", - value, key); - ret = -1; - goto out; - } - - /* Get the record-counters value */ - ret = glusterd_volinfo_get_boolean(volinfo, "features.record-counters"); - if (ret == -1) { - snprintf(errstr, sizeof(errstr), - "Failed to retrieve value of" - "features.record-counters from volume info"); - goto out; - } - current_rc = ret; - - /* if any of the thresholds are set to a non-zero value - * switch record-counters on, if not already on*/ - if (origin_val > 0) { - if (!current_rc) { - is_set_rc = _gf_true; - current_rc = _gf_true; - } - } else { - /* if the set is for write-freq-threshold */ - if (strstr(key, "write-freq-threshold")) { - current_rt = get_tier_freq_threshold(volinfo, - "cluster.read-freq-threshold"); - if (current_rt == -1) { - snprintf(errstr, sizeof(errstr), - " Failed to retrieve value of" - "cluster.read-freq-threshold"); - goto out; - } - current_wt = origin_val; - } - /* else it should be read-freq-threshold */ - else { - current_wt = get_tier_freq_threshold( - volinfo, "cluster.write-freq-threshold"); - if (current_wt == -1) { - snprintf(errstr, sizeof(errstr), - " Failed to retrieve value of" - "cluster.write-freq-threshold"); - goto out; - } - current_rt = origin_val; - } - - /* Since both the thresholds are zero, set record-counters - * to off, if not already off */ - if (current_rt == 0 && current_wt == 0) { - if (current_rc) { - is_set_rc = _gf_true; - current_rc = _gf_false; - } - } - } - - /* if record-counter has to be set to proposed value */ - if (is_set_rc) { - if (current_rc) { - ret = gf_asprintf(&proposed_rc, "on"); - } else { - ret = gf_asprintf(&proposed_rc, "off"); - } - if (ret < 0) { - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "Failed to allocate memory to dict_value"); - goto error; - } - ret = dict_set_str(volinfo->dict, "features.record-counters", - proposed_rc); - error: - if (ret) { - snprintf(errstr, sizeof(errstr), - "Failed to set features.record-counters" - "to \"%s\" automatically." - "Please try to set features.record-counters " - "\"%s\" manually. The options " - "cluster.write-freq-threshold and " - "cluster.read-freq-threshold can only " - "be set to a non zero value, if " - "features.record-counters is " - "set to \"on\".", - proposed_rc, proposed_rc); - goto out; - } - } - ret = 0; -out: - if (ret) { - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - if (proposed_rc) - GF_FREE(proposed_rc); - } - return ret; -} - -static int -validate_tier(glusterd_volinfo_t *volinfo, dict_t *dict, char *key, char *value, - char **op_errstr) -{ - char errstr[2048] = ""; - int ret = 0; - xlator_t *this = NULL; - int origin_val = -1; - char *current_wm_hi = NULL; - char *current_wm_low = NULL; - uint64_t wm_hi = 0; - uint64_t wm_low = 0; - - this = THIS; - GF_ASSERT(this); - - if (volinfo->type != GF_CLUSTER_TYPE_TIER) { - snprintf(errstr, sizeof(errstr), - "Volume %s is not a tier " - "volume. Option %s is only valid for tier volume.", - volinfo->volname, key); - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - ret = -1; - goto out; - } - - if (strstr(key, "cluster.tier-mode")) { - if (strcmp(value, "test") && strcmp(value, "cache")) { - ret = -1; - goto out; - } - goto out; - } else if (strstr(key, "tier-pause")) { - if (strcmp(value, "off") && strcmp(value, "on")) { - ret = -1; - goto out; - } - goto out; - } else if (strstr(key, "tier-compact")) { - if (strcmp(value, "on") && strcmp(value, "off")) { - ret = -1; - goto out; - } - - goto out; - } - - /* - * Rest of the volume set options for tier are expecting a positive - * Integer. Change the function accordingly if this constraint is - * changed. - */ - ret = gf_string2int(value, &origin_val); - if (ret) { - snprintf(errstr, sizeof(errstr), - "%s is not a compatible " - "value. %s expects an integer value.", - value, key); - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - ret = -1; - goto out; - } - - if (strstr(key, "watermark-hi") || strstr(key, "watermark-low")) { - if ((origin_val < 1) || (origin_val > 99)) { - snprintf(errstr, sizeof(errstr), - "%s is not a " - "compatible value. %s expects a " - "percentage from 1-99.", - value, key); - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - ret = -1; - goto out; - } - - if (strstr(key, "watermark-hi")) { - wm_hi = origin_val; - } else { - glusterd_volinfo_get(volinfo, "cluster.watermark-hi", - ¤t_wm_hi); - gf_string2bytesize_uint64(current_wm_hi, &wm_hi); - } - - if (strstr(key, "watermark-low")) { - wm_low = origin_val; - } else { - glusterd_volinfo_get(volinfo, "cluster.watermark-low", - ¤t_wm_low); - gf_string2bytesize_uint64(current_wm_low, &wm_low); - } - if (wm_low >= wm_hi) { - snprintf(errstr, sizeof(errstr), - "lower watermark" - " cannot be equal or exceed upper " - "watermark."); - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - ret = -1; - goto out; - } - } else if (strstr(key, "tier-promote-frequency") || - strstr(key, "tier-max-mb") || - strstr(key, "tier-max-promote-file-size") || - strstr(key, "tier-max-files") || - strstr(key, "tier-demote-frequency") || - strstr(key, "tier-hot-compact-frequency") || - strstr(key, "tier-cold-compact-frequency") || - strstr(key, "tier-query-limit")) { - if (origin_val < 1) { - snprintf(errstr, sizeof(errstr), - "%s is not a " - " compatible value. %s expects a positive " - "integer value greater than 0.", - value, key); - gf_msg(this->name, GF_LOG_ERROR, EINVAL, GD_MSG_INCOMPATIBLE_VALUE, - "%s", errstr); - *op_errstr = gf_strdup(errstr); - ret = -1; - goto out; - } - } -out: - gf_msg_debug(this->name, 0, "Returning %d", ret); - - return ret; -} - -#endif /* End for USE_GFDB */ - static int validate_cache_max_min_size(glusterd_volinfo_t *volinfo, dict_t *dict, char *key, char *value, char **op_errstr) @@ -2940,261 +2472,6 @@ struct volopt_map_entry glusterd_volopt_map[] = { "/var/run/gluster/shared_storage on enabling this " "option. Unmount and delete the shared storage volume " " on disabling this option."}, -#if USE_GFDB /* no GFDB means tiering is disabled */ - /* tier translator - global tunables */ - {.key = "cluster.write-freq-threshold", - .voltype = "cluster/tier", - .value = "0", - .option = "write-freq-threshold", - .op_version = GD_OP_VERSION_3_7_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier_thresholds, - .description = "Defines the number of writes, in a promotion/demotion" - " cycle, that would mark a file HOT for promotion. Any" - " file that has write hits less than this value will " - "be considered as COLD and will be demoted."}, - {.key = "cluster.read-freq-threshold", - .voltype = "cluster/tier", - .value = "0", - .option = "read-freq-threshold", - .op_version = GD_OP_VERSION_3_7_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier_thresholds, - .description = "Defines the number of reads, in a promotion/demotion " - "cycle, that would mark a file HOT for promotion. Any " - "file that has read hits less than this value will be " - "considered as COLD and will be demoted."}, - { - .key = "cluster.tier-pause", - .voltype = "cluster/tier", - .option = "tier-pause", - .op_version = GD_OP_VERSION_3_7_6, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - }, - { - .key = "cluster.tier-promote-frequency", - .voltype = "cluster/tier", - .value = "120", - .option = "tier-promote-frequency", - .op_version = GD_OP_VERSION_3_7_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - }, - { - .key = "cluster.tier-demote-frequency", - .voltype = "cluster/tier", - .value = "3600", - .option = "tier-demote-frequency", - .op_version = GD_OP_VERSION_3_7_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - }, - {.key = "cluster.watermark-hi", - .voltype = "cluster/tier", - .value = "90", - .option = "watermark-hi", - .op_version = GD_OP_VERSION_3_7_6, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = - "Upper % watermark for promotion. If hot tier fills" - " above this percentage, no promotion will happen and demotion will " - "happen with high probability."}, - {.key = "cluster.watermark-low", - .voltype = "cluster/tier", - .value = "75", - .option = "watermark-low", - .op_version = GD_OP_VERSION_3_7_6, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = - "Lower % watermark. If hot tier is less " - "full than this, promotion will happen and demotion will not happen. " - "If greater than this, promotion/demotion will happen at a " - "probability " - "relative to how full the hot tier is."}, - {.key = "cluster.tier-mode", - .voltype = "cluster/tier", - .option = "tier-mode", - .value = "cache", - .op_version = GD_OP_VERSION_3_7_6, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = - "Either 'test' or 'cache'. Test mode periodically" - " demotes or promotes files automatically based on access." - " Cache mode does so based on whether the cache is full or not," - " as specified with watermarks."}, - {.key = "cluster.tier-max-promote-file-size", - .voltype = "cluster/tier", - .option = "tier-max-promote-file-size", - .value = "0", - .op_version = GD_OP_VERSION_3_7_10, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = - "The maximum file size in bytes that is promoted. If 0, there" - " is no maximum size (default)."}, - {.key = "cluster.tier-max-mb", - .voltype = "cluster/tier", - .option = "tier-max-mb", - .value = "4000", - .op_version = GD_OP_VERSION_3_7_6, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = "The maximum number of MB that may be migrated" - " in any direction in a given cycle by a single node."}, - {.key = "cluster.tier-max-files", - .voltype = "cluster/tier", - .option = "tier-max-files", - .value = "10000", - .op_version = GD_OP_VERSION_3_7_6, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = "The maximum number of files that may be migrated" - " in any direction in a given cycle by a single node."}, - {.key = "cluster.tier-query-limit", - .voltype = "cluster/tier", - .option = "tier-query-limit", - .value = "100", - .op_version = GD_OP_VERSION_3_9_1, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .type = NO_DOC, - .description = "The maximum number of files that may be migrated " - "during an emergency demote. An emergency condition " - "is flagged when writes breach the hi-watermark."}, - {.key = "cluster.tier-compact", - .voltype = "cluster/tier", - .option = "tier-compact", - .value = "on", - .op_version = GD_OP_VERSION_3_9_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - .description = "Activate or deactivate the compaction of the DB" - " for the volume's metadata."}, - { - .key = "cluster.tier-hot-compact-frequency", - .voltype = "cluster/tier", - .value = "604800", - .option = "tier-hot-compact-frequency", - .op_version = GD_OP_VERSION_3_9_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - }, - { - .key = "cluster.tier-cold-compact-frequency", - .voltype = "cluster/tier", - .value = "604800", - .option = "tier-cold-compact-frequency", - .op_version = GD_OP_VERSION_3_9_0, - .flags = VOLOPT_FLAG_CLIENT_OPT, - .validate_fn = validate_tier, - }, - {.key = "features.ctr-enabled", - .voltype = "features/changetimerecorder", - .value = "off", - .option = "ctr-enabled", - .op_version = GD_OP_VERSION_3_7_0, - .description = "Enable CTR xlator"}, - {.key = "features.record-counters", - .voltype = "features/changetimerecorder", - .value = "off", - .option = "record-counters", - .op_version = GD_OP_VERSION_3_7_0, - .validate_fn = validate_tier_counters, - .description = "Its a Change Time Recorder Xlator option to " - "enable recording write " - "and read heat counters. The default is disabled. " - "If enabled, \"cluster.write-freq-threshold\" and " - "\"cluster.read-freq-threshold\" defined the number " - "of writes (or reads) to a given file are needed " - "before triggering migration."}, - {.key = "features.ctr-record-metadata-heat", - .voltype = "features/changetimerecorder", - .value = "off", - .option = "ctr-record-metadata-heat", - .op_version = GD_OP_VERSION_3_7_0, - .type = NO_DOC, - .description = "Its a Change Time Recorder Xlator option to " - "enable recording write heat on metadata of the file. " - "The default is disabled. " - "Metadata is inode attributes like atime, mtime," - " permissions etc and " - "extended attributes of a file ."}, - {.key = "features.ctr_link_consistency", - .voltype = "features/changetimerecorder", - .value = "off", - .option = "ctr_link_consistency", - .op_version = GD_OP_VERSION_3_7_0, - .type = NO_DOC, - .description = "Enable a crash consistent way of recording hardlink " - "updates by Change Time Recorder Xlator. " - "When recording in a crash " - "consistent way the data operations will " - "experience more latency."}, - {.key = "features.ctr_lookupheal_link_timeout", - .voltype = "features/changetimerecorder", - .value = "300", - .option = "ctr_lookupheal_link_timeout", - .op_version = GD_OP_VERSION_3_7_2, - .type = NO_DOC, - .description = "Defines the expiry period of in-memory " - "hardlink of an inode," - "used by lookup heal in Change Time Recorder." - "Once the expiry period" - "hits an attempt to heal the database per " - "hardlink is done and the " - "in-memory hardlink period is reset"}, - {.key = "features.ctr_lookupheal_inode_timeout", - .voltype = "features/changetimerecorder", - .value = "300", - .option = "ctr_lookupheal_inode_timeout", - .op_version = GD_OP_VERSION_3_7_2, - .type = NO_DOC, - .description = "Defines the expiry period of in-memory inode," - "used by lookup heal in Change Time Recorder. " - "Once the expiry period" - "hits an attempt to heal the database per " - "inode is done"}, - {.key = "features.ctr-sql-db-cachesize", - .voltype = "features/changetimerecorder", - .value = "12500", - .option = "sql-db-cachesize", - .validate_fn = validate_ctr_sql_params, - .op_version = GD_OP_VERSION_3_7_7, - .description = "Defines the cache size of the sqlite database of " - "changetimerecorder xlator." - "The input to this option is in pages." - "Each page is 4096 bytes. Default value is 12500 " - "pages." - "The max value is 262144 pages i.e 1 GB and " - "the min value is 1000 pages i.e ~ 4 MB. "}, - {.key = "features.ctr-sql-db-wal-autocheckpoint", - .voltype = "features/changetimerecorder", - .value = "25000", - .option = "sql-db-wal-autocheckpoint", - .validate_fn = validate_ctr_sql_params, - .op_version = GD_OP_VERSION_3_7_7, - .description = "Defines the autocheckpoint of the sqlite database of " - " changetimerecorder. " - "The input to this option is in pages. " - "Each page is 4096 bytes. Default value is 25000 " - "pages." - "The max value is 262144 pages i.e 1 GB and " - "the min value is 1000 pages i.e ~4 MB."}, - {.key = VKEY_FEATURES_SELINUX, - .voltype = "features/selinux", - .type = NO_DOC, - .value = "on", - .op_version = GD_OP_VERSION_3_11_0, - .description = "Convert security.selinux xattrs to " - "trusted.gluster.selinux on the bricks. Recommended " - "to have enabled when clients and/or bricks support " - "SELinux."}, - -#endif /* USE_GFDB */ { .key = "locks.trace", .voltype = "features/locks", |