summaryrefslogtreecommitdiffstats
path: root/geo-replication
diff options
context:
space:
mode:
Diffstat (limited to 'geo-replication')
-rw-r--r--geo-replication/syncdaemon/master.py8
-rw-r--r--geo-replication/syncdaemon/resource.py10
2 files changed, 15 insertions, 3 deletions
diff --git a/geo-replication/syncdaemon/master.py b/geo-replication/syncdaemon/master.py
index 38b9d9c9fc9..f318e7901f8 100644
--- a/geo-replication/syncdaemon/master.py
+++ b/geo-replication/syncdaemon/master.py
@@ -884,10 +884,16 @@ class GMasterChangelogMixin(GMasterCommon):
if isinstance(st, int):
st = {}
+ rl = None
+ if st and stat.S_ISLNK(st.st_mode):
+ rl = errno_wrap(os.readlink, [en], [ENOENT], [ESTALE])
+ if isinstance(rl, int):
+ rl = None
+
entry_update()
e1 = unescape(os.path.join(pfx, ec[self.POS_ENTRY1 - 1]))
entries.append(edct(ty, gfid=gfid, entry=e1, entry1=en,
- stat=st))
+ stat=st, link=rl))
else:
# stat() to get mode and other information
go = os.path.join(pfx, gfid)
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
index 740861a23f3..19363401e65 100644
--- a/geo-replication/syncdaemon/resource.py
+++ b/geo-replication/syncdaemon/resource.py
@@ -717,8 +717,14 @@ class Server(object):
st = lstat(entry)
if isinstance(st, int):
if e['stat'] and not stat.S_ISDIR(e['stat']['mode']):
- (pg, bname) = entry2pb(en)
- blob = entry_pack_reg_stat(gfid, bname, e['stat'])
+ if stat.S_ISLNK(e['stat']['mode']) and \
+ e['link'] is not None:
+ (pg, bname) = entry2pb(en)
+ blob = entry_pack_symlink(gfid, bname,
+ e['link'], e['stat'])
+ else:
+ (pg, bname) = entry2pb(en)
+ blob = entry_pack_reg_stat(gfid, bname, e['stat'])
else:
cmd_ret = errno_wrap(os.rename,
[entry, en],