Add arguments for MemcacheClientPool init

Now keystonemiddleware use oslo.cache to init the
MemcacheClientPool. The MemcacheClientPool in
Olso.cache needs (urls, arguments, **kwargs) parameter
to init, but keystonemiddleware passed only
(urls, **kwargs). Then it leads the error:
__init__() takes exactly 3 arguments (2 given)

This patch fixed this issue.

Please note that even this error is fixed, set
"memcache_use_advanced_pool = True" will lead another
error, see bug #1747565 for the detail. It will be
fixed in the following patch.

Closes-bug: #1748160
Change-Id: I642f959ab8b010207314312a6b6a06a6de23e92c
This commit is contained in:
wangxiyuan 2018-02-08 17:19:28 +08:00
parent 2a6a905949
commit ce06c0ce10
2 changed files with 18 additions and 2 deletions

View File

@ -88,11 +88,12 @@ class _CachePool(list):
class _MemcacheClientPool(object):
"""An advanced memcached client pool that is eventlet safe."""
def __init__(self, memcache_servers, **kwargs):
def __init__(self, memcache_servers, arguments, **kwargs):
# NOTE(sileht): This will import python-memcached, we don't want
# it as hard dependency, so lazy load it.
from oslo_cache import _memcache_pool
self._pool = _memcache_pool.MemcacheClientPool(memcache_servers,
arguments,
**kwargs)
@contextlib.contextmanager
@ -120,12 +121,17 @@ class TokenCache(object):
def __init__(self, log, cache_time=None,
env_cache_name=None, memcached_servers=None,
use_advanced_pool=False, **kwargs):
use_advanced_pool=False, dead_retry=None, socket_timeout=None,
**kwargs):
self._LOG = log
self._cache_time = cache_time
self._env_cache_name = env_cache_name
self._memcached_servers = memcached_servers
self._use_advanced_pool = use_advanced_pool
self._arguments = {
'dead_retry': dead_retry,
'socket_timeout': socket_timeout
}
self._memcache_pool_options = kwargs
self._cache_pool = None
@ -137,6 +143,7 @@ class TokenCache(object):
elif self._use_advanced_pool and self._memcached_servers:
return _MemcacheClientPool(self._memcached_servers,
self._arguments,
**self._memcache_pool_options)
else:

View File

@ -150,3 +150,12 @@ class TestLiveMemcache(base.BaseAuthTokenTestCase):
token_cache.initialize({})
token_cache.set(token, data)
self.assertEqual(token_cache.get(token), data)
def test_memcache_pool_init(self):
conf = {
'memcached_servers': ','.join(MEMCACHED_SERVERS),
'memcache_use_advanced_pool': True
}
token_cache = self.create_simple_middleware(conf=conf)._token_cache
token_cache.initialize({})