diff options
author | Ravishankar N <ravishankar@redhat.com> | 2018-02-14 12:15:53 +0530 |
---|---|---|
committer | Shyamsundar Ranganathan <srangana@redhat.com> | 2018-03-16 13:39:18 +0000 |
commit | 721ba8f8075a6a5696f165282f1ef5742c1f4a46 (patch) | |
tree | 8b71afabc12699821625bb39f5d820a1bd524882 /xlators/mgmt/glusterd/src/glusterd-utils.c | |
parent | 8fb21afdd033c5d466854400c6a7604fcf5241c3 (diff) |
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: 1552404
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
(cherry picked from commit bd2c45fe3180fe36b042d5eabd348b6eaeb8d3e2)
Diffstat (limited to 'xlators/mgmt/glusterd/src/glusterd-utils.c')
-rw-r--r-- | xlators/mgmt/glusterd/src/glusterd-utils.c | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/xlators/mgmt/glusterd/src/glusterd-utils.c b/xlators/mgmt/glusterd/src/glusterd-utils.c index 5b2a3dda6d1..a258690071f 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; |