diff options
author | Ravishankar N <ravishankar@redhat.com> | 2015-08-07 10:10:54 +0530 |
---|---|---|
committer | Niels de Vos <ndevos@redhat.com> | 2015-08-07 04:49:57 -0700 |
commit | 2a3f0fb035cf677d058a920d2fc1931a18e565ec (patch) | |
tree | 2f5740cacf7ac2aaacda5bcb57a087e03cc0d8e5 /xlators/cluster/afr/src/afr-common.c | |
parent | 7255febab2c38cc89b71f2519a20d10f53586000 (diff) |
afr: Do not wind statfs to arbiter brick
Problem: AFR serves statfs from the brick having the least free space
available. Since the size to be allocated to the arbiter brick in a 3
way replica is supposed to be considerably lesser than the other 2
bricks, statfs will be served from this brick which is incorrect.
Fix: Don't serve statfs from the arbiter brick.
Change-Id: I5af098b9c50626f52cf3d7dbb060bf754c797f05
BUG: 1251346
Reported-by: Fredrik Brandt <fredrikb@denlillaplaneten.se>
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: http://review.gluster.org/11857
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'xlators/cluster/afr/src/afr-common.c')
-rw-r--r-- | xlators/cluster/afr/src/afr-common.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 829914f8bea..de92affc6d3 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -645,7 +645,7 @@ afr_accuse_smallfiles (xlator_t *this, struct afr_reply *replies, for (i = 0; i < priv->child_count; i++) { if (data_accused[i]) continue; - if ((priv->arbiter_count == 1) && (i == ARBITER_BRICK_INDEX)) + if (AFR_IS_ARBITER_BRICK(priv, i)) continue; if (replies[i].poststat.ia_size < maxsize) data_accused[i] = 1; @@ -1732,8 +1732,7 @@ afr_local_discovery_cbk (call_frame_t *frame, void *cookie, xlator_t *this, */ if (is_local) { /* Don't set arbiter as read child. */ - if ((priv->arbiter_count == 1) && - (child_index == ARBITER_BRICK_INDEX)) + if (AFR_IS_ARBITER_BRICK(priv, child_index)) goto out; gf_msg (this->name, GF_LOG_INFO, 0, AFR_MSG_LOCAL_CHILD, "selecting local read_child %s", @@ -3616,6 +3615,8 @@ afr_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) if (!local) goto out; + if (priv->arbiter_count == 1 && local->child_up[ARBITER_BRICK_INDEX]) + local->call_count--; call_count = local->call_count; if (!call_count) { op_errno = ENOTCONN; @@ -3624,6 +3625,8 @@ afr_statfs (call_frame_t *frame, xlator_t *this, loc_t *loc, dict_t *xdata) for (i = 0; i < priv->child_count; i++) { if (local->child_up[i]) { + if (AFR_IS_ARBITER_BRICK(priv, i)) + continue; STACK_WIND (frame, afr_statfs_cbk, priv->children[i], priv->children[i]->fops->statfs, |