summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohan Guldmyr <johan.guldmyr@csc.fi>2019-07-04 09:11:44 +0300
committerJohan Guldmyr <johan.guldmyr@csc.fi>2019-07-10 20:34:59 +0300
commitd6b74f5ce9af172d0b3a33234b1489d9af59e5fe (patch)
treec052ee775a3012c6f377cffc0140e93907cf829d
parent7679e2057a07998fdf1b2cb4a8fd825c20ee469d (diff)
downloadoslo-middleware-d6b74f5ce9af172d0b3a33234b1489d9af59e5fe.tar.gz
More details when logging 413 Entity Too Large
I spent a few days figuring out what was making the OS-FEDERATION mapping rules create/update API calls return "413 Entity Too Large" errors for our CentOS7/haproxy/apache/mod_wsgi/keystone/python2 setup. To make this a bit easier for future users then I would like to include max_request_body_size and its value in the response and also log the error. Retaining the "Request is too large." bit in the message is intended to also make it easier to find where the limit is set. Resulting log error in keystone looks like: 2019-07-04 06:52:13.217789 | ubuntu-bionic | INFO [oslo_middleware.sizelimit] Request is too large. Larger than max_request_body_size (114688). Change-Id: Ic66882afba25222ab8464ac9194c5002c8666db1 Closes-Bug: #1835363 Signed-off-by: Johan Guldmyr <johan.guldmyr@csc.fi>
-rw-r--r--oslo_middleware/sizelimit.py12
-rw-r--r--releasenotes/notes/log_max_request_body_size-1835363-6f37946210a100d7.yaml4
2 files changed, 13 insertions, 3 deletions
diff --git a/oslo_middleware/sizelimit.py b/oslo_middleware/sizelimit.py
index 026b709..4156449 100644
--- a/oslo_middleware/sizelimit.py
+++ b/oslo_middleware/sizelimit.py
@@ -17,6 +17,8 @@ Request Body limiting middleware.
"""
+import logging
+
from oslo_config import cfg
import webob.dec
import webob.exc
@@ -24,6 +26,8 @@ import webob.exc
from oslo_middleware._i18n import _
from oslo_middleware import base
+LOG = logging.getLogger(__name__)
+
_oldopts = [cfg.DeprecatedOpt('osapi_max_request_body_size',
group='DEFAULT'),
@@ -56,7 +60,7 @@ class LimitingReader(object):
for chunk in self.data:
self.bytes_read += len(chunk)
if self.bytes_read > self.limit:
- msg = _("Request is too large.")
+ msg = _("Request is too large. Larger than %s") % self.limit
raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
else:
yield chunk
@@ -70,7 +74,7 @@ class LimitingReader(object):
result = self.data.read(i)
self.bytes_read += len(result)
if self.bytes_read > self.limit:
- msg = _("Request is too large.")
+ msg = _("Request is too large. Larger than %s.") % self.limit
raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
return result
@@ -87,7 +91,9 @@ class RequestBodySizeLimiter(base.ConfigurableMiddleware):
max_size = self._conf_get('max_request_body_size')
if (req.content_length is not None and
req.content_length > max_size):
- msg = _("Request is too large.")
+ msg = _("Request is too large. "
+ "Larger than max_request_body_size (%s).") % max_size
+ LOG.info(msg)
raise webob.exc.HTTPRequestEntityTooLarge(explanation=msg)
if req.content_length is None:
limiter = LimitingReader(req.body_file, max_size)
diff --git a/releasenotes/notes/log_max_request_body_size-1835363-6f37946210a100d7.yaml b/releasenotes/notes/log_max_request_body_size-1835363-6f37946210a100d7.yaml
new file mode 100644
index 0000000..864d2ed
--- /dev/null
+++ b/releasenotes/notes/log_max_request_body_size-1835363-6f37946210a100d7.yaml
@@ -0,0 +1,4 @@
+---
+other:
+ - |
+ Log when max_request_body_size is exceeded.