From 1579d633dbeeeede20d016bbec806a00688e32f3 Mon Sep 17 00:00:00 2001 From: Gaurav Kumar Garg Date: Tue, 24 Mar 2015 18:20:42 +0530 Subject: glusterd: bitrot scrub-throttle/scrub-frequency/scrub option handling CLI commands for bitrot features: volume bitrot {scrub-throttle frozen|lazy|normal|aggressive} volume bitrot {scrub-frequency daily|weekly|biweekly|monthly} volume bitrot {scrub pause|resume} These commands will handle their options and set respective value in dictionary. Change-Id: I1e8aa1b1c7d91a7f0faec9a2968b3072f42f8ba8 BUG: 1170075 Signed-off-by: Gaurav Kumar Garg Reviewed-on: http://review.gluster.org/9985 Tested-by: Gluster Build System Reviewed-by: Atin Mukherjee Reviewed-by: Vijay Bellur --- xlators/mgmt/glusterd/src/glusterd-bitrot.c | 111 ++++++++++++++++++++++++++++ 1 file changed, 111 insertions(+) (limited to 'xlators/mgmt/glusterd/src/glusterd-bitrot.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-bitrot.c b/xlators/mgmt/glusterd/src/glusterd-bitrot.c index 5bd906312a4..a0de7a35998 100644 --- a/xlators/mgmt/glusterd/src/glusterd-bitrot.c +++ b/xlators/mgmt/glusterd/src/glusterd-bitrot.c @@ -127,6 +127,99 @@ glusterd_handle_bitrot (rpcsvc_request_t *req) return glusterd_big_locked_handler (req, __glusterd_handle_bitrot); } +static int +glusterd_bitrot_scrub_throttle (glusterd_volinfo_t *volinfo, dict_t *dict, + char *key, char **op_errstr) +{ + int32_t ret = -1; + char *scrub_throttle = NULL; + char *option = NULL; + xlator_t *this = NULL; + + this = THIS; + GF_ASSERT (this); + + ret = dict_get_str (dict, "scrub-throttle-value", &scrub_throttle); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to fetch scrub-" + "throttle value"); + goto out; + } + + option = gf_strdup (scrub_throttle); + ret = dict_set_dynstr (volinfo->dict, key, option); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to set option %s", + key); + goto out; + } + +out: + return ret; +} + +static int +glusterd_bitrot_scrub_freq (glusterd_volinfo_t *volinfo, dict_t *dict, + char *key, char **op_errstr) +{ + int32_t ret = -1; + char *scrub_freq = NULL; + xlator_t *this = NULL; + char *option = NULL; + + this = THIS; + GF_ASSERT (this); + + ret = dict_get_str (dict, "scrub-frequency-value", &scrub_freq); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to fetch scrub-" + "freq value"); + goto out; + } + + option = gf_strdup (scrub_freq); + ret = dict_set_dynstr (volinfo->dict, key, option); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to set option %s", + key); + goto out; + } + +out: + return ret; +} + +static int +glusterd_bitrot_scrub (glusterd_volinfo_t *volinfo, dict_t *dict, + char *key, char **op_errstr) +{ + int32_t ret = -1; + char *scrub_value = NULL; + xlator_t *this = NULL; + char *option = NULL; + + this = THIS; + GF_ASSERT (this); + + ret = dict_get_str (dict, "scrub-value", &scrub_value); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Unable to fetch scrub" + "value"); + goto out; + } + + option = gf_strdup (scrub_value); + ret = dict_set_dynstr (volinfo->dict, key, option); + if (ret) { + gf_log (this->name, GF_LOG_ERROR, "Failed to set option %s", + key); + goto out; + } + +out: + return ret; +} + static int glusterd_bitrot_enable (glusterd_volinfo_t *volinfo, char **op_errstr) { @@ -295,6 +388,24 @@ glusterd_op_bitrot (dict_t *dict, char **op_errstr, dict_t *rsp_dict) goto out; break; + + case GF_BITROT_OPTION_TYPE_SCRUB_THROTTLE: + ret = glusterd_bitrot_scrub_throttle (volinfo, dict, + "features.scrub-throttle", + op_errstr); + goto out; + + case GF_BITROT_OPTION_TYPE_SCRUB_FREQ: + ret = glusterd_bitrot_scrub_freq (volinfo, dict, + "features.scrub-freq", + op_errstr); + goto out; + + case GF_BITROT_OPTION_TYPE_SCRUB: + ret = glusterd_bitrot_scrub (volinfo, dict, "features.scrub", + op_errstr); + goto out; + default: gf_asprintf (op_errstr, "Bitrot command failed. Invalid " "opcode"); -- cgit