From f46047ea0f36084f4456887673552a01b926382d Mon Sep 17 00:00:00 2001 From: Mohit Agrawal Date: Tue, 24 Apr 2018 09:43:09 +0530 Subject: 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 --- xlators/storage/posix/src/posix-inode-fd-ops.c | 33 ++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'xlators/storage/posix/src') 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 #include #include +#include #ifndef GF_BSD_HOST_OS #include @@ -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, -- cgit