geo-rep: Remove unlink fop during rmdir
Even though it is known to be 'RMDIR', os.unlink was being tried and os.rmdir is issued upon receiving EISDIR. It's unnecessary unlink call for 'RMDIR'. Fixed the same. Change-Id: I8dbb680ee2c7f0c32b7799b1ed5351b3621cb42a BUG: 1441106 Signed-off-by: Kotresh HR <khiremat@redhat.com> Reviewed-on: https://review.gluster.org/17041 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: Aravinda VK <avishwan@redhat.com>
This commit is contained in:
parent
c09f5a28bf
commit
324509b340
@ -644,7 +644,7 @@ class Server(object):
|
||||
st['uid'], st['gid'],
|
||||
gf, st['mode'], bn, lnk)
|
||||
|
||||
def entry_purge(entry, gfid):
|
||||
def entry_purge(op, entry, gfid):
|
||||
# This is an extremely racy code and needs to be fixed ASAP.
|
||||
# The GFID check here is to be sure that the pargfid/bname
|
||||
# to be purged is the GFID gotten from the changelog.
|
||||
@ -653,14 +653,14 @@ class Server(object):
|
||||
if not matching_disk_gfid(gfid, entry):
|
||||
return
|
||||
|
||||
er = errno_wrap(os.unlink, [entry], [ENOENT, ESTALE, EISDIR],
|
||||
[EBUSY])
|
||||
if isinstance(er, int):
|
||||
if er == EISDIR:
|
||||
er = errno_wrap(os.rmdir, [entry], [ENOENT, ESTALE,
|
||||
ENOTEMPTY], [EBUSY])
|
||||
if er == ENOTEMPTY:
|
||||
return er
|
||||
if op == 'UNLINK':
|
||||
errno_wrap(os.unlink, [entry], [ENOENT, ESTALE],
|
||||
[EBUSY])
|
||||
elif op == 'RMDIR':
|
||||
er = errno_wrap(os.rmdir, [entry], [ENOENT, ESTALE,
|
||||
ENOTEMPTY], [EBUSY])
|
||||
if er == ENOTEMPTY:
|
||||
return er
|
||||
|
||||
def collect_failure(e, cmd_ret):
|
||||
# We do this for failing fops on Slave
|
||||
@ -757,7 +757,7 @@ class Server(object):
|
||||
if op in ['RMDIR', 'UNLINK']:
|
||||
# Try once, if rmdir failed with ENOTEMPTY
|
||||
# then delete recursively.
|
||||
er = entry_purge(entry, gfid)
|
||||
er = entry_purge(op, entry, gfid)
|
||||
if isinstance(er, int):
|
||||
if er == ENOTEMPTY and op == 'RMDIR':
|
||||
# Retry if ENOTEMPTY, ESTALE
|
||||
|
Loading…
x
Reference in New Issue
Block a user