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 | |
| 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>
| -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,  | 
