diff options
author | Avra Sengupta <asengupt@redhat.com> | 2013-02-21 12:37:26 +0530 |
---|---|---|
committer | Anand Avati <avati@redhat.com> | 2013-02-22 12:13:10 -0800 |
commit | 8897d08e6af68b025bd10b1dffa680fcd2bcea5b (patch) | |
tree | 0c1079c22375c2712b397de2f23d8184b723ec04 /xlators/mgmt/glusterd/src/glusterd-volume-set.c | |
parent | 9f8a8df8146792d35caf56896129602ea22e65e1 (diff) |
glusterd: Added validation function for quota-timeout.
Change-Id: I7f82f4217a41e0fe41272e6ef82925e1fe97fcd5
BUG: 765230
Signed-off-by: Avra Sengupta <asengupt@redhat.com>
Reviewed-on: http://review.gluster.org/4557
Reviewed-by: Amar Tumballi <amarts@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-volume-set.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-volume-set.c | 52 |
1 files changed, 50 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c index e66c1f9bbea..721f88cde73 100644 --- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c +++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c @@ -161,6 +161,52 @@ out: return ret; } +static int +validate_quota (dict_t *dict, char *key, char *value, + char **op_errstr) +{ + char errstr[2048] = ""; + char *volname = NULL; + glusterd_conf_t *priv = NULL; + glusterd_volinfo_t *volinfo = NULL; + int ret = 0; + xlator_t *this = NULL; + + this = THIS; + GF_ASSERT (this); + priv = this->private; + GF_ASSERT (priv); + + ret = check_dict_key_value (dict, key, value); + if (ret) + goto out; + + ret = get_volname_volinfo (dict, &volname, &volinfo); + if (ret) + goto out; + + ret = glusterd_volinfo_get_boolean (volinfo, VKEY_FEATURES_QUOTA); + if (ret == -1) { + gf_log (this->name, GF_LOG_ERROR, + "failed to get the quota status"); + goto out; + } + + if (ret == _gf_false) { + snprintf (errstr, sizeof (errstr), + "Cannot set %s. Enable quota first.", key); + gf_log (this->name, GF_LOG_ERROR, "%s", errstr); + *op_errstr = gf_strdup (errstr); + ret = -1; + goto out; + } + + ret = 0; +out: + gf_log (this->name, GF_LOG_DEBUG, "Returning %d", ret); + + return ret; +} /* dispatch table for VOLUME SET * ----------------------------- @@ -729,7 +775,8 @@ struct volopt_map_entry glusterd_volopt_map[] = { .voltype = "features/quota", .option = "timeout", .value = "0", - .op_version = 1 + .op_version = 1, + .validate_fn = validate_quota }, { .key = "features.quota-deem-statfs", .voltype = "features/quota", @@ -737,7 +784,8 @@ struct volopt_map_entry glusterd_volopt_map[] = { .value = "off", .type = DOC, .flags = 0, - .op_version = 2 + .op_version = 2, + .validate_fn = validate_quota }, /* Marker xlator options */ |