path: root/libglusterfs/src
diff options
authorKrutika Dhananjay <>2016-11-07 16:06:56 +0530
committerPranith Kumar Karampuri <>2016-11-08 22:39:14 -0800
commitc5d2002ac2e68dc8aa7d54a32e9bd441b9b8bcfa (patch)
treeb29316a472ea24a0ea23dfb3eb364ba9e04c608f /libglusterfs/src
parent7168e27c23079734934976a59bc2ee31bbed31a5 (diff)
features/shard: Fill loc.pargfid too for named lookups on individual shards
Backport of: 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: Reviewed-by: Pranith Kumar Karampuri <> Reviewed-by: Ravishankar N <> NetBSD-regression: NetBSD Build System <> Smoke: Gluster Build System <> CentOS-regression: Gluster Build System <>
Diffstat (limited to 'libglusterfs/src')
2 files changed, 18 insertions, 0 deletions
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c
index 22a494d01a5..5c91380be15 100644
--- a/libglusterfs/src/xlator.c
+++ b/libglusterfs/src/xlator.c
@@ -762,6 +762,23 @@ out:
+loc_pargfid (loc_t *loc, uuid_t gfid)
+ if (!gfid)
+ goto out;
+ gf_uuid_clear (gfid);
+ if (!loc)
+ goto out;
+ else if (!gf_uuid_is_null (loc->pargfid))
+ gf_uuid_copy (gfid, loc->pargfid);
+ else if (loc->parent && (!gf_uuid_is_null (loc->parent->gfid)))
+ gf_uuid_copy (gfid, loc->parent->gfid);
+ return;
loc_gfid_utoa (loc_t *loc)
diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h
index ca30f99650e..61d904f4d58 100644
--- a/libglusterfs/src/xlator.h
+++ b/libglusterfs/src/xlator.h
@@ -963,6 +963,7 @@ int loc_copy_overload_parent (loc_t *dst,
void loc_wipe (loc_t *loc);
int loc_path (loc_t *loc, const char *bname);
void loc_gfid (loc_t *loc, uuid_t gfid);
+void loc_pargfid (loc_t *loc, uuid_t pargfid);
char* loc_gfid_utoa (loc_t *loc);
gf_boolean_t loc_is_root (loc_t *loc);
int32_t loc_build_child (loc_t *child, loc_t *parent, char *name);