summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src
diff options
context:
space:
mode:
authorAmar Tumballi <amarts@redhat.com>2018-10-03 17:00:24 +0530
committerAtin Mukherjee <amukherj@redhat.com>2018-11-02 02:39:35 +0000
commit55a6ba56bea9ec0d3316c005300c514ea3ab0e54 (patch)
tree0d36d876e25b158858805b682d01bb5207a4f08e /xlators/mgmt/glusterd/src
parent6e8f7bb6ab457cfee42e405243cf4db82a9a56b8 (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/mgmt/glusterd/src')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c75
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c723
2 files changed, 0 insertions, 798 deletions
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",
- &current_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",
- &current_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",