diff options
author | Prashanth Pai <ppai@redhat.com> | 2013-10-30 16:13:50 +0530 |
---|---|---|
committer | Luis Pabon <lpabon@redhat.com> | 2013-11-15 09:06:21 -0800 |
commit | c6d7ddc4bcdefbe7e30946c5c7eb26e74ad0ff0e (patch) | |
tree | a6d78410d90a460acfe910e76f5bc529fd6c9031 /gluster/swift/common/utils.py | |
parent | f54e06b612a6fdf04827ae32503dac5a7da5eb4e (diff) |
Improve logging and raising DiskFileNoSpace
This commit only improves logging whenever ENOSPC (No space on disk)
or EDQUOT (Quota limit exceeded) is returned by glusterfs
Also, added methods to:
- get filename from file descriptor
- log with rate limit
Caveat: Although raising DiskFileNoSpace results in object-server
returning HTTPInsufficientStorage[507] correctly, the swift proxy-server
invokes "best_response" method that returns [503] to the user.
When write-behind translator is turned on in glusterfs, it may set
errno to EIO instead of ENOSPC/EDQUOT. This is documented in BZ 986812
BUG: 985862, 985253, 1020724
Change-Id: Ib0c5e41c11a8cdccc2077f71c31d8a23229452bb
Signed-off-by: Prashanth Pai <ppai@redhat.com>
Reviewed-on: http://review.gluster.org/6199
Reviewed-by: Luis Pabon <lpabon@redhat.com>
Tested-by: Luis Pabon <lpabon@redhat.com>
Reviewed-on: http://review.gluster.org/6269
Diffstat (limited to 'gluster/swift/common/utils.py')
-rw-r--r-- | gluster/swift/common/utils.py | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/gluster/swift/common/utils.py b/gluster/swift/common/utils.py index 6773836..0b2ad28 100644 --- a/gluster/swift/common/utils.py +++ b/gluster/swift/common/utils.py @@ -22,8 +22,9 @@ from hashlib import md5 from eventlet import sleep import cPickle as pickle from gluster.swift.common.exceptions import GlusterFileSystemIOError +from swift.common.exceptions import DiskFileNoSpace from gluster.swift.common.fs_utils import os_path, do_stat, do_listdir, \ - do_walk, do_rmdir, do_fstat + do_walk, do_rmdir, do_fstat, do_log_rl, get_filename_from_fd from gluster.swift.common import Glusterfs X_CONTENT_TYPE = 'Content-Type' @@ -137,9 +138,19 @@ def write_metadata(path_or_fd, metadata): '%s%s' % (METADATA_KEY, key or ''), metastr[:MAX_XATTR_SIZE]) except IOError as err: - raise GlusterFileSystemIOError( - err.errno, - 'xattr.setxattr("%s", %s, metastr)' % (path_or_fd, key)) + if err.errno in (errno.ENOSPC, errno.EDQUOT): + if isinstance(path_or_fd, int): + filename = get_filename_from_fd(path_or_fd) + do_log_rl("write_metadata(%d, metadata) failed: %s : %s", + path_or_fd, err, filename) + else: + do_log_rl("write_metadata(%s, metadata) failed: %s", + path_or_fd, err) + raise DiskFileNoSpace() + else: + raise GlusterFileSystemIOError( + err.errno, + 'xattr.setxattr("%s", %s, metastr)' % (path_or_fd, key)) metastr = metastr[MAX_XATTR_SIZE:] key += 1 |