summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c4
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.c20
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-utils.h3
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volgen.c8
4 files changed, 31 insertions, 4 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index b6f0197aa19..40f5704b698 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -4895,7 +4895,7 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict)
(dict,
_gf_false,
key, orig_key,
- volinfo->dict,
+ volinfo,
&rsp.op_errstr);
if (ret && !rsp.op_errstr) {
snprintf (err_str,
@@ -4921,7 +4921,7 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict)
} else {
/* Handle the "all" volume option request */
ret = glusterd_get_default_val_for_volopt (dict, _gf_true, NULL,
- NULL, volinfo->dict,
+ NULL, volinfo,
&rsp.op_errstr);
if (ret && !rsp.op_errstr) {
snprintf (err_str, sizeof(err_str),
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index 6f12a34d624..c7ea074e5f8 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -11983,7 +11983,8 @@ out:
int
glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts,
char *input_key, char *orig_key,
- dict_t *vol_dict, char **op_errstr)
+ glusterd_volinfo_t *volinfo,
+ char **op_errstr)
{
struct volopt_map_entry *vme = NULL;
int ret = -1;
@@ -11994,6 +11995,7 @@ glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts,
char dict_key[50] = {0,};
gf_boolean_t key_found = _gf_false;
glusterd_conf_t *priv = NULL;
+ dict_t *vol_dict = NULL;
this = THIS;
GF_ASSERT (this);
@@ -12001,6 +12003,7 @@ glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts,
priv = this->private;
GF_VALIDATE_OR_GOTO (this->name, priv, out);
+ vol_dict = volinfo->dict;
GF_VALIDATE_OR_GOTO (this->name, vol_dict, out);
/* Check whether key is passed for a single option */
@@ -12022,6 +12025,20 @@ glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts,
if (!def_val) {
ret = dict_get_str (vol_dict, vme->key, &def_val);
if (!def_val) {
+ /* For replicate volumes
+ * performance.client-io-threads will be set to
+ * off by default until explicitly turned on
+ */
+ if (!strcmp (vme->key,
+ "performance.client-io-threads")) {
+ if (volinfo->type ==
+ GF_CLUSTER_TYPE_REPLICATE ||
+ volinfo->type ==
+ GF_CLUSTER_TYPE_STRIPE_REPLICATE) {
+ def_val = "off";
+ goto set_count;
+ }
+ }
if (vme->value) {
def_val = vme->value;
} else {
@@ -12034,6 +12051,7 @@ glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts,
}
}
}
+set_count:
count++;
sprintf (dict_key, "key%d", count);
ret = dict_set_str(ctx, dict_key, vme->key);
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.h b/xlators/mgmt/glusterd/src/glusterd-utils.h
index a9aefb85246..5986b9bf4fd 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
@@ -699,7 +699,8 @@ glusterd_get_global_options_for_all_vols (rpcsvc_request_t *req, dict_t *dict,
int
glusterd_get_default_val_for_volopt (dict_t *dict, gf_boolean_t all_opts,
char *key, char *orig_key,
- dict_t *vol_dict, char **err_str);
+ glusterd_volinfo_t *volinfo,
+ char **err_str);
int
glusterd_check_client_op_version_support (char *volname, uint32_t op_version,
diff --git a/xlators/mgmt/glusterd/src/glusterd-volgen.c b/xlators/mgmt/glusterd/src/glusterd-volgen.c
index 957bbfcee25..df68aa52922 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c
@@ -2654,6 +2654,14 @@ perfxl_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme,
(vme->op_version > volinfo->client_op_version))
return 0;
+ /* For replicate volumes do not load io-threads as it affects
+ * performance
+ */
+ if (!strcmp (vme->key, "performance.client-io-threads") &&
+ (GF_CLUSTER_TYPE_STRIPE_REPLICATE == volinfo->type ||
+ GF_CLUSTER_TYPE_REPLICATE == volinfo->type))
+ return 0;
+
/* if VKEY_READDIR_AHEAD is enabled and parallel readdir is
* not enabled then load readdir-ahead here else it will be
* loaded as a child of dht */