diff --git a/gluster/swift/common/fs_utils.py b/gluster/swift/common/fs_utils.py index 1ef68ed..03c5a77 100644 --- a/gluster/swift/common/fs_utils.py +++ b/gluster/swift/common/fs_utils.py @@ -226,8 +226,14 @@ def do_close(fd): 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): diff --git a/test/unit/common/test_fs_utils.py b/test/unit/common/test_fs_utils.py index 0f5f6f6..dbf052f 100644 --- a/test/unit/common/test_fs_utils.py +++ b/test/unit/common/test_fs_utils.py @@ -517,6 +517,15 @@ class TestFsUtils(unittest.TestCase): finally: os.remove(tmpfile) + def test_do_close_err_ENOSPC(self): + + def _mock_os_close_enospc(fd): + raise OSError(errno.ENOSPC, os.strerror(errno.ENOSPC)) + + fd, tmpfile = mkstemp() + with patch('os.close', _mock_os_close_enospc): + self.assertRaises(DiskFileNoSpace, fs.do_close, fd) + def test_do_unlink(self): fd, tmpfile = mkstemp() try: