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>
This commit is contained in:
parent
7679e2057a
commit
d6b74f5ce9
@ -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)
|
||||
|
@ -0,0 +1,4 @@
|
||||
---
|
||||
other:
|
||||
- |
|
||||
Log when max_request_body_size is exceeded.
|
Loading…
Reference in New Issue
Block a user