diff options
author | Kotresh HR <khiremat@redhat.com> | 2015-05-21 11:55:03 +0530 |
---|---|---|
committer | Venky Shankar <vshankar@redhat.com> | 2015-05-28 23:19:27 -0700 |
commit | 3eaf21e3cc8cf481226d1ed495d7261b1acbb594 (patch) | |
tree | 61a74bd62e6f6e5c7b7c0365329926fa831ec900 | |
parent | 4675bffe46d4cd93ad7198167ca4beb9da4e293e (diff) |
geo-rep: Disable xattrs and acls support with tar_ssh
Geo-rep can't sync xattrs and acls with tar over ssh
for following reasons.
Issue 1: xattrs doesn't sync with tar over ssh.
Reason: untar doesn't respect '--overwrite' option when used along
with '--xattrs'. So it sends unlink if the file exists on
destination and re-creates afresh. But all entry operations
are banned in aux-gfid-mount as it may lead to gfid-mismatch.
Hence fails with EPERM. This happens only when some xattr is
set on a file in master volume.
Issue2: acls on directories does not sync with tar over ssh.
Reason: tar tries to opendir ".gfid/<gfid1>" and is not supported
by gfid-access-translator as readirp can't be handled on
virtual inodes and hence fails with ENOTSUP where as it syncs
for files.
Since the issue is with tar commmand it self and nothing could be
done from gluster side, disabling xattr and acls support with tar
over ssh option.
Geo-rep can sync xattrs and acls with 'rsync' as the sync engine.
Change-Id: I6821d327e7fe15545adef644869aa2389f79c701
BUG: 1223642
Signed-off-by: Kotresh HR <khiremat@redhat.com>
Reviewed-on: http://review.gluster.org/10873
Tested-by: NetBSD Build System
Reviewed-by: Venky Shankar <vshankar@redhat.com>
-rw-r--r-- | geo-replication/syncdaemon/master.py | 3 | ||||
-rw-r--r-- | geo-replication/syncdaemon/resource.py | 4 |
2 files changed, 2 insertions, 5 deletions
diff --git a/geo-replication/syncdaemon/master.py b/geo-replication/syncdaemon/master.py index ef79f02a52c..aedfc232b07 100644 --- a/geo-replication/syncdaemon/master.py +++ b/geo-replication/syncdaemon/master.py @@ -886,7 +886,8 @@ class GMasterChangelogMixin(GMasterCommon): elif ec[1] == 'SETXATTR': # To sync xattr/acls use rsync/tar, --xattrs and --acls # switch to rsync and tar - if boolify(gconf.sync_xattrs) or boolify(gconf.sync_acls): + if not boolify(gconf.use_tarssh) and \ + (boolify(gconf.sync_xattrs) or boolify(gconf.sync_acls)): datas.add(os.path.join(pfx, ec[0])) else: logging.warn('got invalid changelog type: %s' % (et)) diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 71fcc8c798f..d5d8d02e05e 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -956,13 +956,9 @@ class SlaveRemote(object): logging.debug("files: " + ", ".join(files)) (host, rdir) = slaveurl.split(':') tar_cmd = ["tar"] + \ - (boolify(gconf.sync_xattrs) and ['--xattrs'] or []) + \ - (boolify(gconf.sync_acls) and ['--acls'] or []) + \ ["-cf", "-", "--files-from", "-"] ssh_cmd = gconf.ssh_command_tar.split() + \ [host, "tar"] + \ - (boolify(gconf.sync_xattrs) and ['--xattrs'] or []) + \ - (boolify(gconf.sync_acls) and ['--acls'] or []) + \ ["--overwrite", "-xf", "-", "-C", rdir] p0 = Popen(tar_cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE) |