summaryrefslogtreecommitdiffstats
path: root/xlators/cluster/afr/src/afr-self-heal-metadata.c
diff options
context:
space:
mode:
authorRavishankar N <ravishankar@redhat.com>2014-04-11 05:45:56 +0000
committerVijay Bellur <vbellur@redhat.com>2014-04-28 09:56:03 -0700
commit0d2dbd569f5ee187fc7b864c30cc668fee465bb1 (patch)
treeafe712e558fc1eeca8c91cfeb450f241af25ac21 /xlators/cluster/afr/src/afr-self-heal-metadata.c
parent82c244a390679e03ea25830abbb90b0dcc7a69cc (diff)
cluster/afr: perform list-xattr during lookup
Detect and heal mismatching user extended attributes during lookup. Depends on: http://review.gluster.org/#/c/7434/ Change-Id: I49410aafd319ac159fdf9e6f9201871bbf2f67bd BUG: 1078061 Signed-off-by: Ravishankar N <ravishankar@redhat.com> Reviewed-on: http://review.gluster.org/7444 Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com> Tested-by: Gluster Build System <jenkins@build.gluster.com> Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/afr/src/afr-self-heal-metadata.c')
-rw-r--r--xlators/cluster/afr/src/afr-self-heal-metadata.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/xlators/cluster/afr/src/afr-self-heal-metadata.c b/xlators/cluster/afr/src/afr-self-heal-metadata.c
index 7abd852de6c..6cefc8d0fb0 100644
--- a/xlators/cluster/afr/src/afr-self-heal-metadata.c
+++ b/xlators/cluster/afr/src/afr-self-heal-metadata.c
@@ -591,6 +591,7 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this,
int nsources = 0;
int source = 0;
int i = 0;
+ gf_boolean_t xattrs_match = _gf_false;
local = frame->local;
sh = &local->self_heal;
@@ -652,6 +653,9 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this,
sh->source = source;
/* detect changes not visible through pending flags -- JIC */
+ xattrs_match = afr_lookup_xattrs_are_equal (sh->xattr,
+ sh->success_children,
+ sh->success_count);
for (i = 0; i < priv->child_count; i++) {
if (i == source || sh->child_errno[i])
continue;
@@ -661,6 +665,8 @@ afr_sh_metadata_fix (call_frame_t *frame, xlator_t *this,
if (OWNERSHIP_DIFFERS (&sh->buf[i], &sh->buf[source]))
sh->sources[i] = 0;
+ if(!xattrs_match)
+ sh->sources[i] = 0;
}
if ((!IA_ISREG (sh->buf[source].ia_type)) &&