From f81f652899b9fd46114ce9089f6b9a97ea9584a1 Mon Sep 17 00:00:00 2001 From: Prashanth Pai Date: Fri, 27 Dec 2013 14:36:06 +0530 Subject: Handle ENOSPC on os.close() operation It is quite possible that errors on a previous write() operation are first reported at the final close(). For fruther info, refer to: http://review.gluster.org/#/c/6269/ Change-Id: If0fbe2f5109d28c82cb493f2526fd5057f86b556 Signed-off-by: Prashanth Pai Reviewed-on: http://review.gluster.org/6608 Reviewed-by: Luis Pabon Tested-by: Luis Pabon Signed-off-by: Prashanth Pai Reviewed-on: http://review.gluster.org/6666 Tested-by: Chetan Risbud Reviewed-by: Chetan Risbud --- gluster/swift/common/fs_utils.py | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) (limited to 'gluster') diff --git a/gluster/swift/common/fs_utils.py b/gluster/swift/common/fs_utils.py index b2cacac..8d0b40e 100644 --- a/gluster/swift/common/fs_utils.py +++ b/gluster/swift/common/fs_utils.py @@ -239,14 +239,23 @@ def do_close(fd): try: fd.close() except IOError as err: - raise GlusterFileSystemIOError( - err.errno, '%s, os.close(%s)' % (err.strerror, fd)) + if err.errno in (errno.ENOSPC, errno.EDQUOT): + do_log_rl("do_close(%s) failed: %s", fd, err) + raise DiskFileNoSpace() + else: + raise GlusterFileSystemIOError( + err.errno, '%s, os.close(%s)' % (err.strerror, fd)) else: try: os.close(fd) except OSError as err: - raise GlusterFileSystemOSError( - err.errno, '%s, os.close(%s)' % (err.strerror, fd)) + if err.errno in (errno.ENOSPC, errno.EDQUOT): + filename = get_filename_from_fd(fd) + do_log_rl("do_close(%d) failed: %s : %s", fd, err, filename) + raise DiskFileNoSpace() + else: + raise GlusterFileSystemOSError( + err.errno, '%s, os.close(%s)' % (err.strerror, fd)) def do_unlink(path, log=True): -- cgit