summaryrefslogtreecommitdiffstats
path: root/xlators/mgmt/glusterd/src/glusterd-bitrot.c
diff options
context:
space:
mode:
authorGaurav Kumar Garg <ggarg@redhat.com>2015-03-24 18:20:42 +0530
committerVijay Bellur <vbellur@redhat.com>2015-03-25 04:58:59 -0700
commit1579d633dbeeeede20d016bbec806a00688e32f3 (patch)
tree674c4927f0c0b3ccd0578d5573a29d05a3b7a4bc /xlators/mgmt/glusterd/src/glusterd-bitrot.c
parent91708968d01b253ee1ebcec1fdc3d602435144ef (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/mgmt/glusterd/src/glusterd-bitrot.c')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-bitrot.c111
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 5bd9063..a0de7a3 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");