summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGaurav Yadav <gyadav@redhat.com>2017-01-31 16:14:46 +0530
committerJeff Darcy <jdarcy@redhat.com>2017-03-06 11:51:54 -0500
commitc618de80696c4572fad9e28f0454e63ebb2ff4ed (patch)
tree6b1004cc9d65261aa035f80fbe727cf94c442748
parentb7ba77ab3ffb641d06223f7af5145d3d670b032a (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 Change-Id: Ic88815ad49e901e74ffc042170f5caabf7c17a89 BUG: 1417588 Signed-off-by: Gaurav Yadav <gyadav@redhat.com> 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>
-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 b3f6c40d7f0..3229e17fd5f 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)
{
@@ -3044,7 +3073,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",
@@ -3087,7 +3117,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",