summaryrefslogtreecommitdiffstats
path: root/xlators
diff options
context:
space:
mode:
Diffstat (limited to 'xlators')
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-brick-ops.c34
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-handler.c7
-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.c28
-rw-r--r--xlators/mgmt/glusterd/src/glusterd-volume-ops.c34
6 files changed, 92 insertions, 34 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
index fdb6014bb63..6d17ff4e32d 100644
--- a/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-brick-ops.c
@@ -1432,6 +1432,24 @@ glusterd_op_perform_add_bricks (glusterd_volinfo_t *volinfo, int32_t count,
/* Gets changed only if the options are given in add-brick cli */
if (type)
volinfo->type = type;
+ /* performance.client-io-threads is turned on by default,
+ * however this has adverse effects on replicate volumes due to
+ * replication design issues, till that get addressed
+ * performance.client-io-threads option is turned off for all
+ * replicate volumes if not already explicitly enabled.
+ */
+ if (type && glusterd_is_volume_replicate (volinfo) &&
+ conf->op_version >= GD_OP_VERSION_3_12_2) {
+ ret = dict_set_str (volinfo->dict,
+ "performance.client-io-threads",
+ "off");
+ if (ret) {
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ GD_MSG_DICT_SET_FAILED, "Failed to set "
+ "performance.client-io-threads to off");
+ goto out;
+ }
+ }
if (replica_count) {
volinfo->replica_count = replica_count;
@@ -2713,9 +2731,12 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr)
char *cold_shd_key = NULL;
char *hot_shd_key = NULL;
int delete_key = 1;
+ glusterd_conf_t *conf = NULL;
this = THIS;
GF_ASSERT (this);
+ conf = this->private;
+ GF_VALIDATE_OR_GOTO (this->name, conf, out);
ret = dict_get_str (dict, "volname", &volname);
@@ -3005,6 +3026,19 @@ glusterd_op_remove_brick (dict_t *dict, char **op_errstr)
volinfo->subvol_count = (volinfo->brick_count /
volinfo->dist_leaf_count);
+ if (!glusterd_is_volume_replicate (volinfo) &&
+ conf->op_version >= GD_OP_VERSION_3_12_2) {
+ ret = dict_set_str (volinfo->dict,
+ "performance.client-io-threads",
+ "on");
+ if (ret) {
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ GD_MSG_DICT_SET_FAILED, "Failed to set "
+ "performance.client-io-threads to on");
+ goto out;
+ }
+ }
+
ret = glusterd_create_volfiles_and_notify_services (volinfo);
if (ret) {
gf_msg (this->name, GF_LOG_WARNING, 0,
diff --git a/xlators/mgmt/glusterd/src/glusterd-handler.c b/xlators/mgmt/glusterd/src/glusterd-handler.c
index 25898dbd1fb..1d55cc8a215 100644
--- a/xlators/mgmt/glusterd/src/glusterd-handler.c
+++ b/xlators/mgmt/glusterd/src/glusterd-handler.c
@@ -4847,7 +4847,7 @@ glusterd_get_volume_opts (rpcsvc_request_t *req, dict_t *dict)
(dict,
_gf_false,
key, orig_key,
- volinfo,
+ volinfo->dict,
&rsp.op_errstr);
if (ret && !rsp.op_errstr) {
snprintf (err_str,
@@ -4873,7 +4873,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,
+ NULL, volinfo->dict,
&rsp.op_errstr);
if (ret && !rsp.op_errstr) {
snprintf (err_str, sizeof(err_str),
@@ -5462,7 +5462,8 @@ glusterd_get_state (rpcsvc_request_t *req, dict_t *dict)
vol_all_opts = dict_new ();
ret = glusterd_get_default_val_for_volopt (vol_all_opts,
- _gf_true, NULL, NULL, volinfo, &rsp.op_errstr);
+ _gf_true, NULL, NULL, volinfo->dict,
+ &rsp.op_errstr);
if (ret) {
gf_msg (this->name, GF_LOG_ERROR, 0,
GD_MSG_VOL_OPTS_IMPORT_FAIL, "Failed to "
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c
index b861edf4a20..fd70516a289 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.c
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.c
@@ -12836,8 +12836,7 @@ out:
int
glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts,
char *input_key, char *orig_key,
- glusterd_volinfo_t *volinfo,
- char **op_errstr)
+ dict_t *vol_dict, char **op_errstr)
{
struct volopt_map_entry *vme = NULL;
int ret = -1;
@@ -12848,7 +12847,6 @@ 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);
@@ -12856,7 +12854,6 @@ 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 */
@@ -12878,20 +12875,6 @@ 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 {
@@ -12904,7 +12887,6 @@ 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 ce3a7787be5..65ea7565d3a 100644
--- a/xlators/mgmt/glusterd/src/glusterd-utils.h
+++ b/xlators/mgmt/glusterd/src/glusterd-utils.h
@@ -722,8 +722,7 @@ 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,
- glusterd_volinfo_t *volinfo,
- char **err_str);
+ dict_t *vol_dict, 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 f65ad94ace6..f3d4d08bf05 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volgen.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volgen.c
@@ -2671,9 +2671,15 @@ perfxl_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme,
{
gf_boolean_t enabled = _gf_false;
glusterd_volinfo_t *volinfo = NULL;
+ xlator_t *this = NULL;
+ glusterd_conf_t *priv = NULL;
- GF_ASSERT (param);
+ GF_VALIDATE_OR_GOTO ("glusterd", param, out);
volinfo = param;
+ this = THIS;
+ GF_VALIDATE_OR_GOTO ("glusterd", this, out);
+ priv = this->private;
+ GF_VALIDATE_OR_GOTO ("glusterd", priv, out);
if (strcmp (vme->option, "!perf") != 0)
return 0;
@@ -2689,13 +2695,15 @@ 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 (priv->op_version < GD_OP_VERSION_3_12_2) {
+ /* 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
@@ -2706,8 +2714,8 @@ perfxl_option_handler (volgen_graph_t *graph, struct volopt_map_entry *vme,
if (volgen_graph_add (graph, vme->voltype, volinfo->volname))
return 0;
- else
- return -1;
+out:
+ return -1;
}
static int
diff --git a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
index 23795e8ac23..a783a008b14 100644
--- a/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
+++ b/xlators/mgmt/glusterd/src/glusterd-volume-ops.c
@@ -2232,6 +2232,23 @@ glusterd_op_create_volume (dict_t *dict, char **op_errstr)
volinfo->stripe_count = 1;
if (GF_CLUSTER_TYPE_REPLICATE == volinfo->type) {
+ /* performance.client-io-threads is turned on to default,
+ * however this has adverse effects on replicate volumes due to
+ * replication design issues, till that get addressed
+ * performance.client-io-threads option is turned off for all
+ * replicate volumes
+ */
+ if (priv->op_version >= GD_OP_VERSION_3_12_2) {
+ ret = dict_set_str (volinfo->dict,
+ "performance.client-io-threads",
+ "off");
+ if (ret) {
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ GD_MSG_DICT_SET_FAILED, "Failed to set "
+ "performance.client-io-threads to off");
+ goto out;
+ }
+ }
ret = dict_get_int32 (dict, "replica-count",
&volinfo->replica_count);
if (ret) {
@@ -2252,6 +2269,23 @@ glusterd_op_create_volume (dict_t *dict, char **op_errstr)
goto out;
}
} else if (GF_CLUSTER_TYPE_STRIPE_REPLICATE == volinfo->type) {
+ /* performance.client-io-threads is turned on to default,
+ * however this has adverse effects on replicate volumes due to
+ * replication design issues, till that get addressed
+ * performance.client-io-threads option is turned off for all
+ * replicate volumes
+ */
+ if (priv->op_version >= GD_OP_VERSION_3_12_2) {
+ ret = dict_set_str (volinfo->dict,
+ "performance.client-io-threads",
+ "off");
+ if (ret) {
+ gf_msg (this->name, GF_LOG_ERROR, 0,
+ GD_MSG_DICT_SET_FAILED, "Failed to set "
+ "performance.client-io-threads to off");
+ goto out;
+ }
+ }
ret = dict_get_int32 (dict, "stripe-count",
&volinfo->stripe_count);
if (ret) {