diff options
author | Pranith Kumar K <pkarampu@redhat.com> | 2015-01-31 16:07:03 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2015-02-09 06:03:43 -0800 |
commit | efd93f0b2b42f8a8b151bf694fdd340fbcb22ec0 (patch) | |
tree | 22aa408e5c79c33929ab40f3df412b71b8e94fb3 /xlators/cluster/afr/src | |
parent | f18a3f30bbeaf3bb067b913082830d7f874555ca (diff) |
cluster/afr: Enable auto-quorum for replicate with odd number of bricks
Change-Id: I908934f1f22cf7d2d0ceccc0dedf28a69861997f
BUG: 1187885
Signed-off-by: Pranith Kumar K <pkarampu@redhat.com>
Reviewed-on: http://review.gluster.org/9517
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-by: Anuradha Talur <atalur@redhat.com>
Reviewed-by: Ravishankar N <ravishankar@redhat.com>
Diffstat (limited to 'xlators/cluster/afr/src')
-rw-r--r-- | xlators/cluster/afr/src/afr.c | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/xlators/cluster/afr/src/afr.c b/xlators/cluster/afr/src/afr.c index 8e0c2ebef23..bf7ba3fb0ac 100644 --- a/xlators/cluster/afr/src/afr.c +++ b/xlators/cluster/afr/src/afr.c @@ -81,18 +81,26 @@ xlator_subvolume_index (xlator_t *this, xlator_t *subvol) return index; } -void -fix_quorum_options (xlator_t *this, afr_private_t *priv, char *qtype) +static void +fix_quorum_options (xlator_t *this, afr_private_t *priv, char *qtype, + dict_t *options) { - if (priv->quorum_count && strcmp(qtype,"fixed")) { + if (dict_get (options, "quorum-type") == NULL) { + /* If user doesn't configure anything enable auto-quorum if the + * replica has odd number of subvolumes */ + if (priv->child_count % 2) + qtype = "auto"; + } + + if (priv->quorum_count && strcmp (qtype, "fixed")) { gf_msg (this->name,GF_LOG_WARNING, 0, AFR_MSG_QUORUM_OVERRIDE, "quorum-type %s overriding quorum-count %u", qtype, priv->quorum_count); } - if (!strcmp(qtype,"none")) { + + if (!strcmp (qtype, "none")) { priv->quorum_count = 0; - } - else if (!strcmp(qtype,"auto")) { + } else if (!strcmp (qtype, "auto")) { priv->quorum_count = AFR_QUORUM_AUTO; } } @@ -179,7 +187,7 @@ reconfigure (xlator_t *this, dict_t *options) GF_OPTION_RECONF ("quorum-type", qtype, options, str, out); GF_OPTION_RECONF ("quorum-count", priv->quorum_count, options, uint32, out); - fix_quorum_options(this,priv,qtype); + fix_quorum_options (this, priv, qtype, options); if (priv->quorum_count && !afr_has_quorum (priv->child_up, this)) gf_msg (this->name, GF_LOG_WARNING, 0, AFR_MSG_QUORUM_FAIL, "Client-quorum is not met"); @@ -340,7 +348,7 @@ init (xlator_t *this) GF_OPTION_INIT ("quorum-count", priv->quorum_count, uint32, out); GF_OPTION_INIT (AFR_SH_READDIR_SIZE_KEY, priv->sh_readdir_size, size_uint64, out); - fix_quorum_options(this,priv,qtype); + fix_quorum_options (this, priv, qtype, this->options); GF_OPTION_INIT ("post-op-delay-secs", priv->post_op_delay_secs, uint32, out); GF_OPTION_INIT ("ensure-durability", priv->ensure_durability, bool, |