summaryrefslogtreecommitdiffstats
path: root/gluster/swift/container/server.py
diff options
context:
space:
mode:
authorPrashanth Pai <ppai@redhat.com>2013-10-30 16:13:50 +0530
committerLuis Pabon <lpabon@redhat.com>2013-11-15 09:06:21 -0800
commitc6d7ddc4bcdefbe7e30946c5c7eb26e74ad0ff0e (patch)
treea6d78410d90a460acfe910e76f5bc529fd6c9031 /gluster/swift/container/server.py
parentf54e06b612a6fdf04827ae32503dac5a7da5eb4e (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/server.py')
-rw-r--r--gluster/swift/container/server.py14
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."""