diff options
Diffstat (limited to 'xlators/mgmt/glusterd')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-bitrot.c | 47 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volgen.c | 33 | ||||
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 7 |
3 files changed, 87 insertions, 0 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-bitrot.c b/xlators/mgmt/glusterd/src/glusterd-bitrot.c index da1b54ac1df..c32aa1e3ff3 100644 --- a/xlators/mgmt/glusterd/src/glusterd-bitrot.c +++ b/xlators/mgmt/glusterd/src/glusterd-bitrot.c @@ -32,6 +32,7 @@ const char *gd_bitrot_op_list[GF_BITROT_OPTION_TYPE_MAX] = { [GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE] = "scrub-throttle", [GF_BITROT_OPTION_TYPE_SCRUB_FREQ] = "scrub-frequency", [GF_BITROT_OPTION_TYPE_SCRUB] = "scrub", + [GF_BITROT_OPTION_TYPE_EXPIRY_TIME] = "expiry-time", }; int @@ -243,6 +244,44 @@ out: } static int +glusterd_bitrot_expiry_time (glusterd_volinfo_t *volinfo, dict_t *dict, + char *key, char **op_errstr) +{ + int32_t ret = -1; + uint32_t expiry_time = 0; + xlator_t *this = NULL; + char dkey[1024] = {0,}; + + this = THIS; + GF_ASSERT (this); + + ret = dict_get_uint32 (dict, "expiry-time", &expiry_time); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to get bitrot expiry" + " timer value."); + goto out; + } + + snprintf (dkey, sizeof (dkey), "%d", expiry_time); + + ret = dict_set_dynstr_with_alloc (volinfo->dict, key, dkey); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to set option %s", + key); + goto out; + } + + ret = glusterd_bitdsvc_reconfigure (); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to reconfigure bitrot" + "services"); + goto out; + } +out: + return ret; +} + +static int glusterd_bitrot_enable (glusterd_volinfo_t *volinfo, char **op_errstr) { int32_t ret = -1; @@ -471,6 +510,14 @@ glusterd_op_bitrot (dict_t *dict, char **op_errstr, dict_t *rsp_dict) goto out; break; + case GF_BITROT_OPTION_TYPE_EXPIRY_TIME: + ret = glusterd_bitrot_expiry_time (volinfo, dict, + "features.expiry-time", + op_errstr); + if (ret) + goto out; + break; + default: gf_asprintf (op_errstr, "Bitrot command failed. Invalid " "opcode"); diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c index 8fe1be16fad..e618e2c7a35 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volgen.c +++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c @@ -3738,6 +3738,33 @@ gd_get_matching_option (char **options, char *option) } static int +bitrot_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme, + void *param) +{ + xlator_t *xl = NULL; + char *bitrot_option = NULL; + int ret = 0; + glusterd_volinfo_t *volinfo = NULL; + + volinfo = param; + + xl = first_of (graph); + + if (!strcmp (vme->option, "expiry-time")) { + ret = gf_asprintf (&bitrot_option, "expiry-time"); + if (ret != -1) { + ret = xlator_set_option (xl, bitrot_option, vme->value); + GF_FREE (bitrot_option); + } + + if (ret) + return -1; + } + + return ret; +} + +static int scrubber_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme, void *param) { @@ -4976,6 +5003,12 @@ build_bitd_volume_graph (volgen_graph_t *graph, goto out; } + ret = volgen_graph_set_options_generic (&cgraph, set_dict, + volinfo, + bitrot_option_handler); + if (ret) + goto out; + ret = volgen_graph_merge_sub (graph, &cgraph, clusters); if (ret) goto out; diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index 2ea2ae2eadc..3d3525297f5 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -1935,6 +1935,13 @@ struct volopt_map_entry glusterd_volopt_map[] = { .flags = OPT_FLAG_FORCE, .type = NO_DOC, }, + { .key = "features.expiry-time", + .voltype = "features/bitrot", + .value = SIGNING_TIMEOUT, + .option = "expiry-time", + .op_version = GD_OP_VERSION_3_7_0, + .type = NO_DOC, + }, /* Upcall translator options */ { .key = "features.cache-invalidation", .voltype = "features/upcall", |