diff options
| author | Krutika Dhananjay <kdhananj@redhat.com> | 2016-11-07 16:06:56 +0530 | 
|---|---|---|
| committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2016-11-08 23:34:31 -0800 | 
| commit | 5f34de09997b653d05330477c7cb4e17508e3230 (patch) | |
| tree | aaf84f1740465996a80a5335010cae8d7a07a53b /libglusterfs/src | |
| parent | d569483536da1e8017f7105de8b211f172438d4c (diff) | |
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: I1ad027b7b2ccd6b5c0162726b63b06d261b108e8
BUG: 1392844
Signed-off-by: Krutika Dhananjay <kdhananj@redhat.com>
Reviewed-on: http://review.gluster.org/15795
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Reviewed-by: Ravishankar N <ravishankar@redhat.com>
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Diffstat (limited to 'libglusterfs/src')
| -rw-r--r-- | libglusterfs/src/xlator.c | 17 | ||||
| -rw-r--r-- | libglusterfs/src/xlator.h | 1 | 
2 files changed, 18 insertions, 0 deletions
diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index 2221332a092..3c1cde50fa0 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -762,6 +762,23 @@ out:          return;  } +void +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); +out: +        return; +} +  char*  loc_gfid_utoa (loc_t *loc)  { diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 555916d2adb..70e6f0a108d 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -1011,6 +1011,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);  | 
