diff options
| -rw-r--r-- | geo-replication/syncdaemon/gsyncd.py | 1 | ||||
| -rw-r--r-- | geo-replication/syncdaemon/master.py | 5 | ||||
| -rw-r--r-- | geo-replication/syncdaemon/resource.py | 10 | 
3 files changed, 13 insertions, 3 deletions
diff --git a/geo-replication/syncdaemon/gsyncd.py b/geo-replication/syncdaemon/gsyncd.py index 84ad13487ce..b38f19d33f7 100644 --- a/geo-replication/syncdaemon/gsyncd.py +++ b/geo-replication/syncdaemon/gsyncd.py @@ -231,6 +231,7 @@ def main_i():      op.add_option('--ignore-deletes', default=False, action='store_true')      op.add_option('--isolated-slave', default=False, action='store_true')      op.add_option('--use-rsync-xattrs', default=False, action='store_true') +    op.add_option('--sync-xattrs', default=True, action='store_true')      op.add_option('--pause-on-start', default=False, action='store_true')      op.add_option('-L', '--log-level', metavar='LVL')      op.add_option('-r', '--remote-gsyncd', metavar='CMD', diff --git a/geo-replication/syncdaemon/master.py b/geo-replication/syncdaemon/master.py index c092c526a0e..51c26c76116 100644 --- a/geo-replication/syncdaemon/master.py +++ b/geo-replication/syncdaemon/master.py @@ -971,6 +971,11 @@ class GMasterChangelogMixin(GMasterCommon):                                                        st_mtime=ec[6])))                      else:                          meta_gfid.add((os.path.join(pfx, ec[0]), )) +                elif ec[1] == 'SETXATTR': +                    # To sync xattr use rsync/tar, --xattrs switch +                    # to rsync and tar +                    if boolify(gconf.sync_xattrs): +                        datas.add(os.path.join(pfx, ec[0]))              else:                  logging.warn('got invalid changelog type: %s' % (et))          logging.debug('entries: %s' % repr(entries)) diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index 0e0dd88eff8..e9796fc48f6 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -830,7 +830,7 @@ class SlaveRemote(object):              ['-avR0', '--inplace', '--files-from=-', '--super',               '--stats', '--numeric-ids', '--no-implied-dirs'] + \              gconf.rsync_options.split() + \ -            (boolify(gconf.use_rsync_xattrs) and ['--xattrs'] or []) + \ +            (boolify(gconf.sync_xattrs) and ['--xattrs'] or []) + \              ['.'] + list(args)          po = Popen(argv, stdin=subprocess.PIPE, stderr=subprocess.PIPE)          for f in files: @@ -852,9 +852,13 @@ class SlaveRemote(object):              raise GsyncdError("no files to sync")          logging.debug("files: " + ", ".join(files))          (host, rdir) = slaveurl.split(':') -        tar_cmd = ["tar", "-cf", "-", "--files-from", "-"] +        tar_cmd = ["tar"] + \ +            (boolify(gconf.sync_xattrs) and ['--xattrs'] or []) + \ +            ["-cf", "-", "--files-from", "-"]          ssh_cmd = gconf.ssh_command_tar.split() + \ -            [host, "tar", "--overwrite", "-xf", "-", "-C", rdir] +            [host, "tar"] + \ +            (boolify(gconf.sync_xattrs) and ['--xattrs'] or []) + \ +            ["--overwrite", "-xf", "-", "-C", rdir]          p0 = Popen(tar_cmd, stdout=subprocess.PIPE,                     stdin=subprocess.PIPE, stderr=subprocess.PIPE)          p1 = Popen(ssh_cmd, stdin=p0.stdout, stderr=subprocess.PIPE)  | 
