diff options
author | Johan Guldmyr <johan.guldmyr@csc.fi> | 2019-07-04 09:11:44 +0300 |
---|---|---|
committer | Johan Guldmyr <johan.guldmyr@csc.fi> | 2019-07-10 20:34:59 +0300 |
commit | d6b74f5ce9af172d0b3a33234b1489d9af59e5fe (patch) | |
tree | c052ee775a3012c6f377cffc0140e93907cf829d /oslo_middleware/sizelimit.py | |
parent | 7679e2057a07998fdf1b2cb4a8fd825c20ee469d (diff) | |
download | oslo-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>
Diffstat (limited to 'oslo_middleware/sizelimit.py')
-rw-r--r-- | oslo_middleware/sizelimit.py | 12 |
1 files changed, 9 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) |