diff options
author | Gaurav Kumar Garg <ggarg@redhat.com> | 2015-03-24 18:20:42 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2015-03-25 04:58:59 -0700 |
commit | 1579d633dbeeeede20d016bbec806a00688e32f3 (patch) | |
tree | 674c4927f0c0b3ccd0578d5573a29d05a3b7a4bc /xlators | |
parent | 91708968d01b253ee1ebcec1fdc3d602435144ef (diff) |
glusterd: bitrot scrub-throttle/scrub-frequency/scrub option handling
CLI commands for bitrot features:
volume bitrot <volname> {scrub-throttle frozen|lazy|normal|aggressive}
volume bitrot <volname> {scrub-frequency daily|weekly|biweekly|monthly}
volume bitrot <volname> {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 <ggarg@redhat.com>
Reviewed-on: http://review.gluster.org/9985
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Atin Mukherjee <amukherj@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-bitrot.c | 111 |
1 files changed, 111 insertions, 0 deletions
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 @@ -128,6 +128,99 @@ glusterd_handle_bitrot (rpcsvc_request_t *req) } 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) { int32_t ret = -1; @@ -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"); |