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>
This commit is contained in:
parent
91708968d0
commit
1579d633db
@ -4859,12 +4859,14 @@ cli_cmd_bitrot_parse (const char **words, int wordcount, dict_t **options)
|
||||
char *opwords[] = {"enable", "disable",
|
||||
"scrub-throttle",
|
||||
"scrub-frequency",
|
||||
"scrub"};
|
||||
"scrub", NULL};
|
||||
char *scrub_throt_values[] = {"frozen", "lazy", "normal",
|
||||
"aggressive"};
|
||||
"aggressive", NULL};
|
||||
char *scrub_freq_values[] = {"daily", "weekly",
|
||||
"biweekly", "monthly"};
|
||||
char *scrub_values[] = {"pause", "resume"};
|
||||
"biweekly", "monthly",
|
||||
NULL};
|
||||
char *scrub_values[] = {"pause", "resume",
|
||||
NULL};
|
||||
dict_t *dict = NULL;
|
||||
gf_bitrot_type type = GF_BITROT_OPTION_TYPE_NONE;
|
||||
|
||||
|
@ -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");
|
||||
|
Loading…
x
Reference in New Issue
Block a user