diff options
| -rw-r--r-- | geo-replication/syncdaemon/master.py | 8 | ||||
| -rw-r--r-- | geo-replication/syncdaemon/resource.py | 10 | 
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],  | 
