From c5d2002ac2e68dc8aa7d54a32e9bd441b9b8bcfa Mon Sep 17 00:00:00 2001 From: Krutika Dhananjay Date: Mon, 7 Nov 2016 16:06:56 +0530 Subject: features/shard: Fill loc.pargfid too for named lookups on individual shards Backport of: http://review.gluster.org/#/c/15788/ On a sharded volume when a brick is replaced while IO is going on, named lookup on individual shards as part of read/write was failing with ENOENT on the replaced brick, and as a result AFR initiated name heal in lookup callback. But since pargfid was empty (which is what this patch attempts to fix), the resolution of the shards by protocol/server used to fail and the following pattern of logs was seen: Brick-logs: [2016-11-08 07:41:49.387127] W [MSGID: 115009] [server-resolve.c:566:server_resolve] 0-rep-server: no resolution type for (null) (LOOKUP) [2016-11-08 07:41:49.387157] E [MSGID: 115050] [server-rpc-fops.c:156:server_lookup_cbk] 0-rep-server: 91833: LOOKUP(null) (00000000-0000-0000-0000-000000000000/16d47463-ece5-4b33-9c93-470be918c0f6.82) ==> (Invalid argument) [Invalid argument] Client-logs: [2016-11-08 07:41:27.497687] W [MSGID: 114031] [client-rpc-fops.c:2930:client3_3_lookup_cbk] 2-rep-client-0: remote operation failed. Path: (null) (00000000-0000-0000-0000-000000000000) [Invalid argument] [2016-11-08 07:41:27.497755] W [MSGID: 114031] [client-rpc-fops.c:2930:client3_3_lookup_cbk] 2-rep-client-1: remote operation failed. Path: (null) (00000000-0000-0000-0000-000000000000) [Invalid argument] [2016-11-08 07:41:27.498500] W [MSGID: 114031] [client-rpc-fops.c:2930:client3_3_lookup_cbk] 2-rep-client-2: remote operation failed. Path: (null) (00000000-0000-0000-0000-000000000000) [Invalid argument] [2016-11-08 07:41:27.499680] E [MSGID: 133010] Also, this patch makes AFR by itself choose a non-NULL pargfid even if its ancestors fail to initialize all pargfid placeholders. Change-Id: I34b9f90d0f09766b6d87b3994d5cd7a77b622dcb BUG: 1392853 Signed-off-by: Krutika Dhananjay Reviewed-on: http://review.gluster.org/15797 Reviewed-by: Pranith Kumar Karampuri Reviewed-by: Ravishankar N NetBSD-regression: NetBSD Build System Smoke: Gluster Build System CentOS-regression: Gluster Build System --- xlators/cluster/afr/src/afr-common.c | 6 ++++-- xlators/features/shard/src/shard.c | 1 + 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'xlators') diff --git a/xlators/cluster/afr/src/afr-common.c b/xlators/cluster/afr/src/afr-common.c index 24366d17ac1..923afc804be 100644 --- a/xlators/cluster/afr/src/afr-common.c +++ b/xlators/cluster/afr/src/afr-common.c @@ -2235,12 +2235,14 @@ afr_lookup_selfheal_wrap (void *opaque) afr_local_t *local = NULL; xlator_t *this = NULL; inode_t *inode = NULL; + uuid_t pargfid = {0,}; local = frame->local; this = frame->this; + loc_pargfid (&local->loc, pargfid); - ret = afr_selfheal_name (frame->this, local->loc.pargfid, - local->loc.name, &local->cont.lookup.gfid_req); + ret = afr_selfheal_name (frame->this, pargfid, local->loc.name, + &local->cont.lookup.gfid_req); if (ret == -EIO) goto unwind; diff --git a/xlators/features/shard/src/shard.c b/xlators/features/shard/src/shard.c index b8dc5bbf249..2a06f5b901b 100644 --- a/xlators/features/shard/src/shard.c +++ b/xlators/features/shard/src/shard.c @@ -1678,6 +1678,7 @@ shard_common_lookup_shards (call_frame_t *frame, xlator_t *this, inode_t *inode, bname = strrchr (path, '/') + 1; loc.inode = inode_new (this->itable); loc.parent = inode_ref (priv->dot_shard_inode); + gf_uuid_copy (loc.pargfid, priv->dot_shard_gfid); ret = inode_path (loc.parent, bname, (char **) &(loc.path)); if (ret < 0 || !(loc.inode)) { gf_msg (this->name, GF_LOG_ERROR, 0, -- cgit