From bd2c45fe3180fe36b042d5eabd348b6eaeb8d3e2 Mon Sep 17 00:00:00 2001 From: Ravishankar N Date: Wed, 14 Feb 2018 12:15:53 +0530 Subject: glusterd: volume get fixes for client-io-threads & quorum-type 1. If a replica volume created on glusterfs-3.8 was upgraded to glusterfs-3.12, `gluster vol get volname client-io-threads` displayed 'on' even though it wasn't and the xlator wasn't loaded on the client-graph. This was due to removing certain checks in glusterd_get_default_val_for_volopt as a part of commit 47604fad4c2a3951077e41e0c007ceb979bb2c24. Fix it. 2. Also, as a part of op-version bump-up, client-io-threads was being loaded on the clients during volfile regeneration. Prevent it. 3. AFR assumes quorum-type to be auto in newly created replic 3 (odd replica in general) volumes but `gluster vol get quorum-type` displays 'none'. Fix it. Change-Id: I19e586361ed1065c70fb378533d3b4dac1095df9 BUG: 1545056 Signed-off-by: Ravishankar N --- xlators/mgmt/glusterd/src/glusterd-utils.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c') diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 6c40907e7f7..af30756c947 100644 --- a/xlators/mgmt/glusterd/src/glusterd-utils.c +++ b/xlators/mgmt/glusterd/src/glusterd-utils.c @@ -13091,10 +13091,30 @@ out: return ret; } +char * +glusterd_get_option_value (glusterd_volinfo_t *volinfo, char *key) +{ + char *value = NULL; + + if (!glusterd_is_volume_replicate(volinfo)) + goto ret; + + if (!strcmp (key, "performance.client-io-threads")) { + value = "off"; + } else if (!strcmp (key, "cluster.quorum-type")) { + if (volinfo->replica_count%2) { + value = "auto"; + } + } +ret: + return value; +} + 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; @@ -13105,6 +13125,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); @@ -13112,6 +13133,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 */ @@ -13132,6 +13154,9 @@ glusterd_get_default_val_for_volopt (dict_t *ctx, gf_boolean_t all_opts, ret = dict_get_str (priv->opts, vme->key, &def_val); if (!def_val) { ret = dict_get_str (vol_dict, vme->key, &def_val); + if (ret == -ENOENT) + def_val = glusterd_get_option_value (volinfo, + vme->key); if (!def_val) { if (vme->value) { def_val = vme->value; -- cgit