diff options
| author | Prashanth Pai <ppai@redhat.com> | 2013-12-27 14:36:06 +0530 | 
|---|---|---|
| committer | Chetan Risbud <crisbud@redhat.com> | 2014-01-08 03:07:16 -0800 | 
| commit | f81f652899b9fd46114ce9089f6b9a97ea9584a1 (patch) | |
| tree | 1d844686f7734262b69e8b940256468fb0776009 /gluster/swift | |
| parent | 2931f64a92341feb2f0ed35266dd8a16612e1ec6 (diff) | |
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 <ppai@redhat.com>
Reviewed-on: http://review.gluster.org/6608
Reviewed-by: Luis Pabon <lpabon@redhat.com>
Tested-by: Luis Pabon <lpabon@redhat.com>
Signed-off-by: Prashanth Pai <ppai@redhat.com>
Reviewed-on: http://review.gluster.org/6666
Tested-by: Chetan Risbud <crisbud@redhat.com>
Reviewed-by: Chetan Risbud <crisbud@redhat.com>
Diffstat (limited to 'gluster/swift')
| -rw-r--r-- | gluster/swift/common/fs_utils.py | 17 | 
1 files changed, 13 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):  | 
