diff options
author | Mohit Agrawal <moagrawa@redhat.com> | 2018-04-24 09:43:09 +0530 |
---|---|---|
committer | Amar Tumballi <amarts@redhat.com> | 2018-05-03 15:42:54 +0000 |
commit | f46047ea0f36084f4456887673552a01b926382d (patch) | |
tree | 5d2203941b71519fa72d062014b0f20b020105b6 /xlators/storage/posix | |
parent | 47d2f7296b81fe7d8647e629b782c44bbc9f9678 (diff) |
posix: Avoid changelog retries for geo-rep
Problem: georep is slowdown to migrate directory
from master volume to slave volume due to lot
of changelog retries
Solution: Update the condition in posix_getxattr to
ignore MDS_INTERNAL_XATTR as it(posix) ignored
other internal xattrs
BUG: 1571069
Change-Id: I4d91ec73e5b1ca1cb3ecf0825ab9f49e261da70e
fixes: bz#1571069
Signed-off-by: Mohit Agrawal <moagrawa@redhat.com>
Diffstat (limited to 'xlators/storage/posix')
-rw-r--r-- | xlators/storage/posix/src/posix-inode-fd-ops.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/xlators/storage/posix/src/posix-inode-fd-ops.c b/xlators/storage/posix/src/posix-inode-fd-ops.c index fc7375e43ff..496f6a7905b 100644 --- a/xlators/storage/posix/src/posix-inode-fd-ops.c +++ b/xlators/storage/posix/src/posix-inode-fd-ops.c @@ -27,6 +27,7 @@ #include <sys/uio.h> #include <unistd.h> #include <ftw.h> +#include <regex.h> #ifndef GF_BSD_HOST_OS #include <alloca.h> @@ -2802,6 +2803,27 @@ out: return ret; } +gf_boolean_t +posix_is_mds_xattr (const char *name) +{ + regex_t regcmpl; + char *key = {"trusted.glusterfs.*.mds$"}; + regmatch_t result[1] = {{0} }; + gf_boolean_t status = _gf_false; + + if (regcomp (®cmpl, key, REG_EXTENDED)) { + goto out; + } + if (!regexec (®cmpl, name, 1, result, 0)) { + status = _gf_true; + goto out; + } +out: + regfree(®cmpl); + return status; +} + + /** * posix_getxattr - this function returns a dictionary with all the * key:value pair present as xattr. used for @@ -2856,6 +2878,13 @@ posix_getxattr (call_frame_t *frame, xlator_t *this, goto out; } + if (name && posix_is_mds_xattr (name)) { + op_ret = -1; + op_errno = ENOATTR; + goto out; + } + + if (loc->inode && IA_ISDIR(loc->inode->ia_type) && name && ZR_FILE_CONTENT_REQUEST(name)) { ret = posix_get_file_contents (this, loc->gfid, &name[15], @@ -3234,6 +3263,10 @@ posix_getxattr (call_frame_t *frame, xlator_t *this, goto ignore; } + if (posix_is_mds_xattr (keybuffer)) { + goto ignore; + } + memset (value_buf, '\0', XATTR_VAL_BUF_SIZE); have_val = _gf_false; size = sys_lgetxattr (real_path, keybuffer, value_buf, |