From f159e2247b58441449ad8da13ddf5cc5d3887b93 Mon Sep 17 00:00:00 2001 From: Pranith Kumar K Date: Fri, 16 Mar 2012 22:10:02 +0530 Subject: cluster/afr: set_read_child when xactions in progress in fresh lookup Change-Id: I33e0268635ae7a1f247b0052994e027f990083da BUG: 800755 Signed-off-by: Pranith Kumar K Reviewed-on: http://review.gluster.com/2963 Tested-by: Gluster Build System Reviewed-by: Anand Avati --- xlators/cluster/afr/src/afr-common.c | 9 ++++++--- xlators/cluster/afr/src/afr.h | 1 + 2 files changed, 7 insertions(+), 3 deletions(-) (limited to 'xlators/cluster') diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index fb694473..e220a617 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -1673,9 +1673,11 @@ afr_lookup_done_success_action (call_frame_t *frame, xlator_t *this, int32_t ret = -1; afr_local_t *local = NULL; afr_private_t *priv = NULL; + gf_boolean_t fresh_lookup = _gf_false; local = frame->local; priv = this->private; + fresh_lookup = local->cont.lookup.fresh_lookup; if (local->loc.parent == NULL) fail_conflict = _gf_true; @@ -1689,9 +1691,9 @@ afr_lookup_done_success_action (call_frame_t *frame, xlator_t *this, goto out; } - if (!afr_is_transaction_running (local)) { - ret = afr_lookup_select_read_child (local, this, &read_child); - if (ret) + ret = afr_lookup_select_read_child (local, this, &read_child); + if (!afr_is_transaction_running (local) || fresh_lookup) { + if (read_child < 0) goto out; ret = afr_lookup_set_read_ctx (local, this, read_child); @@ -2027,6 +2029,7 @@ afr_lookup (call_frame_t *frame, xlator_t *this, % (priv->child_count); } UNLOCK (&priv->read_child_lock); + local->cont.lookup.fresh_lookup = _gf_true; } local->child_up = memdup (priv->child_up, diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 80a76421..09b1bf2a 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -444,6 +444,7 @@ typedef struct _afr_local { int32_t read_child; int32_t *sources; int32_t *success_children; + gf_boolean_t fresh_lookup; } lookup; struct { -- cgit