diff options
author | Pranith Kumar K <pranithk@gluster.com> | 2012-07-18 10:28:18 +0530 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2012-08-12 21:51:39 -0700 |
commit | 12aa31278c651f36c2ea1c0698ba789aa3f9262c (patch) | |
tree | 21642a29f8456553dea1c0ca26feda431c850ff4 /xlators/cluster/afr/src/afr.h | |
parent | aa4e7d04ff20e38182a62576595951d59524fff0 (diff) |
cluster/afr: Avoid setting split-brain outside inode locks
RCA:
The bug is observed because the decision to mark
a file in split-brain is taken outside appropriate locks.
Lookup gathers xattrs outside any lock. The xattrs being
in split-brain in lookup should only be taken as a hint.
Appropriate inodelks should be taken before confirming
a split-brain. Self-heal confirms this at the moment.
Fix:
Self-heals are launched to inspect xattrs when the
data/metadata self-heal options are turned on.
Decision to set/reset split-brain flag is taken inside
appropriate locks.
Known Issue After fix:
If data/metadata self-heal is turned off, inspecting of
xattrs could not be performed so split-brain behavior
does not work correctly if the self-heal options are turned off.
This bug is handled only in upstream.
Change-Id: I59a43d5ce7bf9ca35bff54a51bf4cfa55d717a9e
BUG: 833727
Signed-off-by: Pranith Kumar K <pranithk@gluster.com>
Reviewed-on: http://review.gluster.com/3691
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Diffstat (limited to 'xlators/cluster/afr/src/afr.h')
-rw-r--r-- | xlators/cluster/afr/src/afr.h | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/xlators/cluster/afr/src/afr.h b/xlators/cluster/afr/src/afr.h index 795db603528..fe0e2b2e6ed 100644 --- a/xlators/cluster/afr/src/afr.h +++ b/xlators/cluster/afr/src/afr.h @@ -261,6 +261,8 @@ typedef struct { int (*algo_completion_cbk) (call_frame_t *frame, xlator_t *this); int (*algo_abort_cbk) (call_frame_t *frame, xlator_t *this); void (*gfid_sh_success_cbk) (call_frame_t *sh_frame, xlator_t *this); + gf_boolean_t mdata_spb; + gf_boolean_t data_spb; call_frame_t *sh_frame; } afr_self_heal_t; @@ -368,10 +370,7 @@ typedef struct _afr_local { unsigned int call_count; unsigned int success_count; unsigned int enoent_count; - - unsigned int govinda_gOvinda; - unsigned int read_child_index; unsigned char read_child_returned; unsigned int first_up_child; @@ -439,6 +438,7 @@ typedef struct _afr_local { int32_t *sources; int32_t *success_children; gf_boolean_t fresh_lookup; + gf_boolean_t possible_spb; } lookup; struct { |