diff options
| author | Ravishankar N <ravishankar@redhat.com> | 2016-09-27 10:39:58 +0530 | 
|---|---|---|
| committer | Pranith Kumar Karampuri <pkarampu@redhat.com> | 2016-09-29 00:10:18 -0700 | 
| commit | 44dbec60a2cd8fe6a68ff30cb6b8a1cf67b717be (patch) | |
| tree | 8f42a93bf4f07e7fcc0b0bc081a0fe00386b0326 /xlators/storage/posix/src | |
| parent | c5c76437a904595994bc6334b0609f727be8b6fa (diff) | |
afr: Ignore gluster internal (virtual) xattrs in metadata heal check
Backport of http://review.gluster.org/#/c/15548/
Problem:
In arbiter configuration, posix-xlator in the arbiter brick always sets the
GF_CONTENT_KEY in the response dict with a value 0. If the file size on the
data bricks is more than quick-read's max-file-size (64kb default), those
bricks don't set the key. Because of this difference in the no. of dict
elements, afr triggers metadata heal in lookup code path, in turn leading to
extra lookups+inodelks.
Fix:
Changed afr dict comparison logic to ignore all virtual xattrs and the on-disk
ones that we should not be healing.
Change-Id: I05730bdd39d8fb0b9a49a5fc9c0bb01f0d3bb308
BUG: 1377193
Signed-off-by: Ravishankar N <ravishankar@redhat.com>
Reviewed-on: http://review.gluster.org/15578
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>
Reviewed-by: Pranith Kumar Karampuri <pkarampu@redhat.com>
Diffstat (limited to 'xlators/storage/posix/src')
| -rw-r--r-- | xlators/storage/posix/src/posix-helpers.c | 18 | 
1 files changed, 1 insertions, 17 deletions
diff --git a/xlators/storage/posix/src/posix-helpers.c b/xlators/storage/posix/src/posix-helpers.c index f93e81589a5..d92839827b4 100644 --- a/xlators/storage/posix/src/posix-helpers.c +++ b/xlators/storage/posix/src/posix-helpers.c @@ -116,22 +116,6 @@ posix_xattr_ignorable (char *key)          return _is_in_array (posix_ignore_xattrs, key);  } -static gf_boolean_t -posix_is_valid_namespace (char *key) -{ -        static char *xattr_namespaces[] = {"trusted.", "security.", "system.", -                                           "user.", NULL }; -        int i = 0; - -        for (i = 0; xattr_namespaces[i]; i++) { -                if (strncmp (key, xattr_namespaces[i], -                             strlen (xattr_namespaces[i])) == 0) -                        return _gf_true; -        } - -        return _gf_false; -} -  static int  _posix_xattr_get_set_from_backend (posix_xattr_filler_t *filler, char *key)  { @@ -141,7 +125,7 @@ _posix_xattr_get_set_from_backend (posix_xattr_filler_t *filler, char *key)          char     val_buf[256] = {0};          gf_boolean_t have_val   = _gf_false; -        if (!posix_is_valid_namespace (key)) { +        if (!gf_is_valid_xattr_namespace (key)) {                  ret = -1;                  goto out;          }  | 
