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/container | |
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/container')
-rw-r--r-- | gluster/swift/container/server.py | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/gluster/swift/container/server.py b/gluster/swift/container/server.py index e832248..173976a 100644 --- a/gluster/swift/container/server.py +++ b/gluster/swift/container/server.py @@ -21,6 +21,9 @@ import gluster.swift.common.constraints # noqa from swift.container import server from gluster.swift.common.DiskDir import DiskDir +from swift.common.utils import public, timing_stats +from swift.common.exceptions import DiskFileNoSpace +from swift.common.swob import HTTPInsufficientStorage class ContainerController(server.ContainerController): @@ -63,6 +66,17 @@ class ContainerController(server.ContainerController): """ return None + @public + @timing_stats() + def PUT(self, req): + try: + return server.ContainerController.PUT(self, req) + except DiskFileNoSpace: + # As container=directory in gluster-swift, we might run out of + # space or exceed quota when creating containers. + drive = req.split_path(1, 1, True) + return HTTPInsufficientStorage(drive=drive, request=req) + def app_factory(global_conf, **local_conf): """paste.deploy app factory for creating WSGI container server apps.""" |