diff options
| author | Aravinda VK <avishwan@redhat.com> | 2015-12-09 13:46:17 +0530 | 
|---|---|---|
| committer | Venky Shankar <vshankar@redhat.com> | 2015-12-17 21:46:35 -0800 | 
| commit | 3151194fad1aed3ab340b53aeeb4e8d131538d12 (patch) | |
| tree | fa61599518f867c8d3aeab25add5aa56c2c14a7a /geo-replication/syncdaemon/master.py | |
| parent | ce3ff7e328483dffdae6ae2914924bc2380db67e (diff) | |
geo-rep: Symlink Rename issue
If ENTRY creation failed for symlink in Slave and symlink
renamed in Master. If Source not exists to Rename in Slave
Geo-rep interprets as Create of Target file. Geo-rep sends blob
of regular file to create symlink instead of sending blob of
symlink.
With this patch, Geo-rep identifies symlink and sends respective
blob.
BUG: 1289859
Change-Id: If9351974d1945141a1d3abb838b7d0de7591e48e
Signed-off-by: Aravinda VK <avishwan@redhat.com>
Reviewed-on: http://review.gluster.org/12917
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: Kotresh HR <khiremat@redhat.com>
Reviewed-by: Milind Changire <mchangir@redhat.com>
Tested-by: Milind Changire <mchangir@redhat.com>
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Diffstat (limited to 'geo-replication/syncdaemon/master.py')
| -rw-r--r-- | geo-replication/syncdaemon/master.py | 8 | 
1 files changed, 7 insertions, 1 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)  | 
