diff options
author | Krutika Dhananjay <kdhananj@redhat.com> | 2015-07-23 18:08:34 +0530 |
---|---|---|
committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2015-07-26 23:05:50 -0700 |
commit | 7bec717f8850135368609fccf1b1c697af60c546 (patch) | |
tree | aad64321981f1bf9f629392168a4e95ff72307b9 | |
parent | 9442e7bf80f5c2189140918bb5588868204521ed (diff) | |
download | glusterfs-7bec717f8850135368609fccf1b1c697af60c546.tar.gz glusterfs-7bec717f8850135368609fccf1b1c697af60c546.tar.xz glusterfs-7bec717f8850135368609fccf1b1c697af60c546.zip |
cluster/afr: Fix incorrect logging in read transactions
afr_read_txn_refresh_done() at its entry point can fail for
reasons like ENOENT/ESTALE but seldom due to EIO, which is something
_AFR_ would internally generate and not receive in response from
a child translator. AFR is reporting "split-brain" for _any_
kind of failure in read txn, of the following kind:
[2015-07-07 18:04:34.787612] E [MSGID: 108008]
[afr-read-txn.c:76:afr_read_txn_refresh_done] 0-vol3-replicate-3:
Failing STAT on gfid 18a973c4-73d3-48b8-942c-33a6f1a8e6b4:
split-brain observed. [Input/output error]
This patch fixes such misleading errors.
To-Do:
Avoid logging EIO if/when split-brain choice is set.
Will do that as part of a separate commit.
Change-Id: Ib513c75168f7026118ad5b3f0b35e9dd498cfe1e
BUG: 1246052
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-on: http://review.gluster.org/11756
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Reviewed-by: Anuradha Talur <atalur@redhat.com>
Reviewed-by: Ravishankar N <ravishankar@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
-rw-r--r-- | xlators/cluster/afr/src/afr-read-txn.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/xlators/cluster/afr/src/afr-read-txn.c b/xlators/cluster/afr/src/afr-read-txn.c index a998ccedbe..1b2faf31ee 100644 --- a/xlators/cluster/afr/src/afr-read-txn.c +++ b/xlators/cluster/afr/src/afr-read-txn.c @@ -72,8 +72,12 @@ afr_read_txn_refresh_done (call_frame_t *frame, xlator_t *this, int err) local = frame->local; inode = local->inode; - if (err) - AFR_READ_TXN_SET_ERROR_AND_GOTO (-1, -err, -1, readfn); + if (err) { + local->op_errno = -err; + local->op_ret = -1; + read_subvol = -1; + goto readfn; + } ret = afr_inode_get_readable (frame, inode, this, local->readable, &event_generation, |