File 0001-Fix-network_topology-view-memory-and-file-leaks.patch of Package openstack-dashboard
From 978e5a3ab318fe26151d42d4f2418f54d2ab1d61 Mon Sep 17 00:00:00 2001
From: Darragh O'Reilly <doreilly@suse.com>
Date: Thu, 17 Dec 2020 15:25:12 +0000
Subject: [PATCH] Fix network_topology view memory and file leaks (bsc#1179084)
The results from get_microversion() don't change, but the call
always misses the cache because the key is made using the
WSGIRequest object which keeps changing. This patch fixes that
by using the memoized_with_request decorator which calls
get_microversion with parameters that don't change.
---
openstack_dashboard/api/nova.py | 35 +++++++++++++++++++++++++--------
1 file changed, 27 insertions(+), 8 deletions(-)
diff --git a/openstack_dashboard/api/nova.py b/openstack_dashboard/api/nova.py
index 7cede8ac9..934d32e13 100644
--- a/openstack_dashboard/api/nova.py
+++ b/openstack_dashboard/api/nova.py
@@ -58,14 +58,6 @@ INSECURE = getattr(settings, 'OPENSTACK_SSL_NO_VERIFY', False)
CACERT = getattr(settings, 'OPENSTACK_SSL_CACERT', None)
-@memoized
-def get_microversion(request, features):
- client = novaclient(request)
- min_ver, max_ver = api_versions._get_server_version_range(client)
- return (microversions.get_microversion_for_features(
- 'nova', features, api_versions.APIVersion, min_ver, max_ver))
-
-
def is_feature_available(request, features):
return bool(get_microversion(request, features))
@@ -266,6 +258,33 @@ def get_auth_params_from_request(request):
base.url_for(request, 'identity')
)
+@memoized_with_request(get_auth_params_from_request)
+def get_microversion(request_auth_params, features):
+ (
+ username,
+ token_id,
+ project_id,
+ project_domain_id,
+ nova_url,
+ auth_url
+ ) = request_auth_params
+ version = VERSIONS.get_active_version()['version']
+ client = nova_client.Client(version,
+ username,
+ token_id,
+ project_id=project_id,
+ project_domain_id=project_domain_id,
+ auth_url=auth_url,
+ insecure=INSECURE,
+ cacert=CACERT,
+ http_log_debug=settings.DEBUG,
+ auth_token=token_id,
+ endpoint_override=nova_url)
+
+ min_ver, max_ver = api_versions._get_server_version_range(client)
+ return (microversions.get_microversion_for_features(
+ 'nova', features, api_versions.APIVersion, min_ver, max_ver))
+
@memoized_with_request(get_auth_params_from_request)
def novaclient(request_auth_params, version=None):
--
2.25.1