Merge "Revert - Cache the User's Project by Token ID"

This commit is contained in:
Jenkins 2015-12-09 13:41:13 +00:00 committed by Gerrit Code Review
commit 3715a5f445
3 changed files with 0 additions and 97 deletions

View File

@ -436,35 +436,6 @@ class OpenStackAuthTestsV2(OpenStackAuthTestsMixin, test.TestCase):
token=unscoped.auth_token)
self.assertEqual(tenant_list, expected_tenants)
def test_tenant_list_caching(self):
tenants = [self.data.tenant_two, self.data.tenant_one]
expected_tenants = [self.data.tenant_one, self.data.tenant_two]
user = self.data.user
unscoped = self.data.unscoped_access_info
client = self._mock_unscoped_client_with_token(user, unscoped)
self._mock_unscoped_list_tenants(client, tenants)
self.mox.ReplayAll()
tenant_list = utils.get_project_list(
user_id=user.id,
auth_url=settings.OPENSTACK_KEYSTONE_URL,
token=unscoped.auth_token)
self.assertEqual(tenant_list, expected_tenants)
# Test to validate that requesting the project list again results
# to using the cache and will not make a Keystone call.
self.assertEqual(utils._PROJECT_CACHE.get(unscoped.auth_token),
expected_tenants)
tenant_list = utils.get_project_list(
user_id=user.id,
auth_url=settings.OPENSTACK_KEYSTONE_URL,
token=unscoped.auth_token)
self.assertEqual(tenant_list, expected_tenants)
utils.remove_project_cache(unscoped.auth_token)
self.assertIsNone(utils._PROJECT_CACHE.get(unscoped.auth_token))
class OpenStackAuthTestsV3(OpenStackAuthTestsMixin, test.TestCase):
@ -819,36 +790,6 @@ class OpenStackAuthTestsV3(OpenStackAuthTestsMixin, test.TestCase):
token=unscoped.auth_token)
self.assertEqual(project_list, expected_projects)
def test_tenant_list_caching(self):
projects = [self.data.project_two, self.data.project_one]
expected_projects = [self.data.project_one, self.data.project_two]
user = self.data.user
unscoped = self.data.unscoped_access_info
client = self._mock_unscoped_client_with_token(user, unscoped)
self._mock_unscoped_list_projects(client, user, projects)
self.mox.ReplayAll()
project_list = utils.get_project_list(
user_id=user.id,
auth_url=settings.OPENSTACK_KEYSTONE_URL,
token=unscoped.auth_token)
self.assertEqual(project_list, expected_projects)
# Test to validate that requesting the project list again results
# to using the cache and will not make a Keystone call.
self.assertEqual(utils._PROJECT_CACHE.get(unscoped.auth_token),
expected_projects)
project_list = utils.get_project_list(
user_id=user.id,
auth_url=settings.OPENSTACK_KEYSTONE_URL,
token=unscoped.auth_token)
self.assertEqual(project_list, expected_projects)
utils.remove_project_cache(unscoped.auth_token)
self.assertIsNone(utils._PROJECT_CACHE.get(unscoped.auth_token))
class OpenStackAuthTestsWebSSO(OpenStackAuthTestsMixin, test.TestCase):

View File

@ -12,14 +12,12 @@
# limitations under the License.
import datetime
import functools
import logging
from django.conf import settings
from django.contrib import auth
from django.contrib.auth import middleware
from django.contrib.auth import models
from django.utils import decorators
from django.utils import timezone
from keystoneclient.auth.identity import v2 as v2_auth
from keystoneclient.auth.identity import v3 as v3_auth
@ -32,8 +30,6 @@ from six.moves.urllib import parse as urlparse
LOG = logging.getLogger(__name__)
_PROJECT_CACHE = {}
_TOKEN_TIMEOUT_MARGIN = getattr(settings, 'TOKEN_TIMEOUT_MARGIN', 0)
"""
@ -116,37 +112,6 @@ def is_safe_url(url, host=None):
return not netloc or netloc == host
def memoize_by_keyword_arg(cache, kw_keys):
"""Memoize a function using the list of keyword argument name as its key.
Wrap a function so that results for any keyword argument tuple are stored
in 'cache'. Note that the keyword args to the function must be usable as
dictionary keys.
:param cache: Dictionary object to store the results.
:param kw_keys: List of keyword arguments names. The values are used
for generating the key in the cache.
"""
def _decorator(func):
@functools.wraps(func, assigned=decorators.available_attrs(func))
def wrapper(*args, **kwargs):
mem_args = [kwargs[key] for key in kw_keys if key in kwargs]
mem_args = '__'.join(str(mem_arg) for mem_arg in mem_args)
if not mem_args:
return func(*args, **kwargs)
if mem_args in cache:
return cache[mem_args]
result = func(*args, **kwargs)
cache[mem_args] = result
return result
return wrapper
return _decorator
def remove_project_cache(token):
_PROJECT_CACHE.pop(token, None)
# Helper for figuring out keystone version
# Implementation will change when API version discovery is available
def get_keystone_version():
@ -317,7 +282,6 @@ def get_token_auth_plugin(auth_url, token, project_id=None, domain_name=None):
reauthenticate=False)
@memoize_by_keyword_arg(_PROJECT_CACHE, ('token', ))
def get_project_list(*args, **kwargs):
is_federated = kwargs.get('is_federated', False)
sess = kwargs.get('session') or get_session()

View File

@ -183,8 +183,6 @@ def logout(request, login_url=None, **kwargs):
def delete_token(endpoint, token_id):
"""Delete a token."""
utils.remove_project_cache(token_id)
try:
endpoint = utils.fix_auth_url_version(endpoint)