diff options
| author | Aravinda VK <avishwan@redhat.com> | 2016-08-10 14:02:09 +0530 | 
|---|---|---|
| committer | Aravinda VK <avishwan@redhat.com> | 2016-09-13 04:56:41 -0700 | 
| commit | 74eb7b4e6bb091123720c4e225208523a424f9c8 (patch) | |
| tree | 4087c81b9372a67376c43007c3ea2758b246cf50 /geo-replication/syncdaemon/resource.py | |
| parent | 9723d353c6ca41aec620da21563a6ade79c71c59 (diff) | |
geo-rep: Handle EISDIR error during Unlink
During Rename, If Source and Target has same inode then
Geo-rep unlinks source. But if source is a directory then
this will fail with below traceback
Traceback (most recent call last):
  File "/usr/libexec/glusterfs/python/syncdaemon/repce.py", line 113, in worker
    res = getattr(self.obj, rmeth)(*in_data[2:])
  File "/usr/libexec/glusterfs/python/syncdaemon/resource.py", line 772,
    in entry_ops
    os.unlink(entry)
OSError: [Errno 21] Is a directory: '.gfid/12711ebf-7fdc-4f4b-9850-2d75581eb
   452/New folder'
With this patch, if EISDIR, rmdir is tried. Logs error in Slave log in case
of ENOTEMPTY.
> Reviewed-on: http://review.gluster.org/15132
> NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
> CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
> Smoke: Gluster Build System <jenkins@build.gluster.org>
> Reviewed-by: Kotresh HR <khiremat@redhat.com>
BUG: 1374579
Change-Id: I099af4192adac5125c0a23988ceb6506f91e987f
Signed-off-by: Aravinda VK <avishwan@redhat.com>
(cherry picked from commit 8a6236e4cfc7bf86e881e5c770a19040a6060ad0)
Reviewed-on: http://review.gluster.org/15436
Smoke: Gluster Build System <jenkins@build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins@build.gluster.org>
CentOS-regression: Gluster Build System <jenkins@build.gluster.org>
Reviewed-by: Saravanakumar Arumugam <sarumuga@redhat.com>
Diffstat (limited to 'geo-replication/syncdaemon/resource.py')
| -rw-r--r-- | geo-replication/syncdaemon/resource.py | 18 | 
1 files changed, 17 insertions, 1 deletions
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py index ed0e7efe2b2..acbd49e1b54 100644 --- a/geo-replication/syncdaemon/resource.py +++ b/geo-replication/syncdaemon/resource.py @@ -773,7 +773,23 @@ class Server(object):                      else:                          if st.st_ino == st1.st_ino:                              # we have a hard link, we can now unlink source -                            os.unlink(entry) +                            try: +                                os.unlink(entry) +                            except OSError as e: +                                if e.errno == EISDIR: +                                    try: +                                        os.rmdir(entry) +                                    except OSError as e: +                                        if e.errno == ENOTEMPTY: +                                            logging.error( +                                                "Unable to delete directory " +                                                "{0}, Both Old({1}) and New{2}" +                                                " directories exists".format( +                                                    entry, entry, en)) +                                        else: +                                            raise +                                else: +                                    raise                          else:                              rename_with_disk_gfid_confirmation(gfid, entry, en)              if blob:  | 
