summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
authorGaurav Yadav <gyadav@redhat.com>2017-01-31 16:14:46 +0530
committerShyamsundar Ranganathan <srangana@redhat.com>2017-04-13 11:35:40 -0400
commit709c3c0dc86b26a30238b4fb09839ee2809e497d (patch)
tree5981b23deb4b713d8607c417667f5546f9b48659 /xlators
parentcea409d71083be2758cde0b242eba4341bd4858d (diff)
glusterd : Fix for replicate and disperse volume option
While setting volume option(disperse-shd-max-threads) for replicate volume and volume option(cluster-shd-max-threads) for disperse volume, glusterd is not validating volume options and setting all the values irrespective of proper validation for disperse-shd-max-threads and cluster-shd-max-threads > Reviewed-on: https://review.gluster.org/16489 > Smoke: Gluster Build System <jenkins@build.gluster.org> > Reviewed-by: Atin Mukherjee <amukherj@redhat.com> > NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> > CentOS-regression: Gluster Build System <jenkins@build.gluster.org> (cherry picked from commit c618de80696c4572fad9e28f0454e63ebb2ff4ed) Change-Id: Ic88815ad49e901e74ffc042170f5caabf7c17a89 BUG: 1438338 Signed-off-by: Gaurav Yadav <gyadav@redhat.com> Reviewed-on: https://review.gluster.org/16981 Smoke: Gluster Build System <jenkins@build.gluster.org> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org> Reviewed-by: Samikshan Bairagya <samikshan@gmail.com> CentOS-regression: Gluster Build System <jenkins@build.gluster.org> Reviewed-by: Shyamsundar Ranganathan <srangana@redhat.com>
Diffstat (limited to 'xlators')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-messages.h8
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-set.c35
2 files changed, 41 insertions, 2 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-messages.h b/xlators/mgmt/glusterd/src/glusterd-messages.h
index 5f1339cb5fd..28c73d23d82 100644
--- a/xlators/mgmt/glusterd/src/glusterd-messages.h
+++ b/xlators/mgmt/glusterd/src/glusterd-messages.h
@@ -2310,6 +2310,14 @@
* @recommendedaction
*
*/
+#define GD_MSG_VOL_NOT_DISPERSE (GLUSTERD_COMP_BASE + 282)
+
+/*!
+ * @messageid
+ * @diagnosis
+ * @recommendedaction
+ *
+ */
#define GD_MSG_OLD_REMOVE_BRICK_EXISTS (GLUSTERD_COMP_BASE + 283)
/*!
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-set.c b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
index 027b65417cd..43f3999f88c 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-set.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-set.c
@@ -720,6 +720,35 @@ out:
}
static int
+validate_disperse (glusterd_volinfo_t *volinfo, dict_t *dict, char *key,
+ char *value, char **op_errstr)
+{
+ char errstr[2048] = "";
+ int ret = -1;
+ xlator_t *this = NULL;
+
+ this = THIS;
+ GF_VALIDATE_OR_GOTO ("glusterd", this, out);
+
+ if (volinfo->type != GF_CLUSTER_TYPE_DISPERSE) {
+ snprintf (errstr, sizeof (errstr),
+ "Cannot set %s for a non-disperse volume.", key);
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ GD_MSG_VOL_NOT_DISPERSE, "%s", errstr);
+ *op_errstr = gf_strdup (errstr);
+ ret = -1;
+ goto out;
+ }
+ ret = 0;
+
+out:
+ gf_msg_debug (ret == 0 ? THIS->name : "glusterd", 0, "Returning %d",
+ ret);
+
+ return ret;
+}
+
+static int
validate_replica (glusterd_volinfo_t *volinfo, dict_t *dict, char *key,
char *value, char **op_errstr)
{
@@ -3022,7 +3051,8 @@ struct volopt_map_entry glusterd_volopt_map[] = {
{ .key = "cluster.shd-max-threads",
.voltype = "cluster/replicate",
.op_version = GD_OP_VERSION_3_7_12,
- .flags = OPT_FLAG_CLIENT_OPT
+ .flags = OPT_FLAG_CLIENT_OPT,
+ .validate_fn = validate_replica
},
{ .key = "cluster.shd-wait-qlength",
.voltype = "cluster/replicate",
@@ -3065,7 +3095,8 @@ struct volopt_map_entry glusterd_volopt_map[] = {
{ .key = "disperse.shd-max-threads",
.voltype = "cluster/disperse",
.op_version = GD_OP_VERSION_3_9_0,
- .flags = OPT_FLAG_CLIENT_OPT
+ .flags = OPT_FLAG_CLIENT_OPT,
+ .validate_fn = validate_disperse
},
{ .key = "disperse.shd-wait-qlength",
.voltype = "cluster/disperse",