Don't use singleton in routes.middleware.RoutesMiddleware

It seems that using default singleton=True in the
routes.middleware.RoutesMiddleware which is leading to use thread-local
RequestConfig singleton object is not working well with eventlet
monkeypatching of threading library which we are doing in Neutron.
As a result it leaks memory in neutron-api workers every time when API
request to not existing API endpoint is made by user.

To avoid that memory leak, let's use singletone=False in that
RoutesMiddleware object, at least until problem with thread-local
singleton and eventlet monkey patching will be solved.

Closes-Bug: #1942179
Change-Id: Id3a529248d3984506f0166bdc32e334127a01b7b
(cherry picked from commit e610a5eb9e)
This commit is contained in:
Slawek Kaplonski 2021-09-03 16:04:02 +02:00
parent b22122453b
commit dfbb9bcb5d

View File

@ -197,8 +197,13 @@ class ExtensionMiddleware(base.ConfigurableMiddleware):
controller = req_controllers[request_ext.key]
controller.add_handler(request_ext.handler)
# NOTE(slaweq): It seems that using singleton=True in conjunction
# with eventlet monkey patching of the threading library doesn't work
# well and there is memory leak. See
# https://bugs.launchpad.net/neutron/+bug/1942179 for details
self._router = routes.middleware.RoutesMiddleware(self._dispatch,
mapper)
mapper,
singleton=False)
super(ExtensionMiddleware, self).__init__(application)
@classmethod