diff options
| -rw-r--r-- | gluster/swift/common/fs_utils.py | 17 | ||||
| -rw-r--r-- | test/unit/common/test_fs_utils.py | 13 | 
2 files changed, 26 insertions, 4 deletions
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): diff --git a/test/unit/common/test_fs_utils.py b/test/unit/common/test_fs_utils.py index 6e05ad3..4bd0712 100644 --- a/test/unit/common/test_fs_utils.py +++ b/test/unit/common/test_fs_utils.py @@ -566,6 +566,19 @@ 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() +        try: +            with patch('os.close', _mock_os_close_enospc): +                self.assertRaises(DiskFileNoSpace, fs.do_close, fd) +        finally: +            os.close(fd) +            os.remove(tmpfile) +      def test_do_unlink(self):          fd, tmpfile = mkstemp()          try:  | 
