summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAravinda VK <avishwan@redhat.com>2016-08-10 14:02:09 +0530
committerAravinda VK <avishwan@redhat.com>2016-09-13 04:56:41 -0700
commit74eb7b4e6bb091123720c4e225208523a424f9c8 (patch)
tree4087c81b9372a67376c43007c3ea2758b246cf50
parent9723d353c6ca41aec620da21563a6ade79c71c59 (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>
-rw-r--r--geo-replication/syncdaemon/resource.py18
1 files changed, 17 insertions, 1 deletions
diff --git a/geo-replication/syncdaemon/resource.py b/geo-replication/syncdaemon/resource.py
index ed0e7ef..acbd49e 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: