summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorkarthik-us <ksubrahm@redhat.com>2017-10-18 16:43:16 +0530
committerjiffin tony Thottan <jthottan@redhat.com>2017-11-30 06:42:49 +0000
commit0324e3cb954f9b8a74af5577a78ed4e2419dd1df (patch)
tree93b4ed5ba7ca0f82ba803deacedbcd43b80bbf38
parent29b633ad5d3cd97951679e47651f552f0a96dc5d (diff)
cluster/afr: Honor default timeout of 5min for analyzing split-brain files
Problem: After setting split-brain-choice option to analyze the file to resolve the split brain using the command "setfattr -n replica.split-brain-choice -v "choiceX" <path-to-file>" should allow to access the file from mount for default timeout of 5mins. But the timeout was not honored and was able to access the file even after the timeout. Fix: Call the inode_invalidate() in afr_set_split_brain_choice_cbk() so that it will triger the cache invalidate after resetting the timer and the split brain choice. So the next calls to access the file will fail with EIO. Change-Id: I698cb833676b22ff3e4c6daf8b883a0958f51a64 BUG: 1514380 Signed-off-by: karthik-us <ksubrahm@redhat.com> (cherry picked from commit 933ec57ccda2c1ba5ce6f207313c3b6802e67ca3)
-rw-r--r--xlators/cluster/afr/src/afr-common.c6
1 files changed, 5 insertions, 1 deletions
diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c
index 2925a1dc1da..9c96056a723 100644
--- a/xlators/cluster/afr/src/afr-common.c
+++ b/xlators/cluster/afr/src/afr-common.c
@@ -730,6 +730,7 @@ afr_set_split_brain_choice_cbk (void *data)
xlator_t *this = THIS;
afr_spb_choice_timeout_cancel (this, inode);
+ inode_invalidate (inode);
inode_unref (inode);
return;
}
@@ -749,6 +750,7 @@ afr_set_split_brain_choice (int ret, call_frame_t *frame, void *opaque)
gf_boolean_t timer_set = _gf_false;
gf_boolean_t timer_cancelled = _gf_false;
gf_boolean_t timer_reset = _gf_false;
+ gf_boolean_t need_invalidate = _gf_true;
int old_spb_choice = -1;
frame = data->frame;
@@ -861,6 +863,7 @@ set_timer:
timer_set = _gf_true;
if (timer_reset && !ctx->timer)
timer_cancelled = _gf_true;
+ need_invalidate = _gf_false;
}
unlock:
UNLOCK(&inode->lock);
@@ -873,7 +876,8 @@ unlock:
* reads from an older cached value despite a change in spb_choice to
* a new value.
*/
- inode_invalidate (inode);
+ if (need_invalidate)
+ inode_invalidate (inode);
out:
if (data)
GF_FREE (data);