diff options
author | Morgan Fainberg <morgan.fainberg@gmail.com> | 2018-07-18 11:26:18 -0700 |
---|---|---|
committer | iain MacDonnell <iain.macdonnell@oracle.com> | 2018-07-20 18:26:03 +0000 |
commit | 3fc10b237affb9614a6591f494ab7e8490b81cce (patch) | |
tree | 26f82b22fbf2bafb4b44ada7e078039b3eac6186 | |
parent | 1b617cfbd14e3bdf9f507b015890d8a30635a46e (diff) | |
download | keystonemiddleware-3fc10b237affb9614a6591f494ab7e8490b81cce.tar.gz |
Fix KeystoneMiddleware memcachepool abstraction
Keystonemiddleware's abstraction for the memcache pool was broken
when converting to use a queue.Queue. The logic that placed the
connection back into the pool was moved to .acquire and the reserve
method was not using acquire.
Conflicts:
keystonemiddleware/auth_token/_cache.py
keystonemiddleware/tests/unit/auth_token/test_cache.py
Change-Id: I0eda5981cbb661f63790258cf8e70c7340615159
Closes-Bug: #1782404
(cherry picked from commit dea1e94d6c89b5df630f30cf61464ed67d5d1ab0)
-rw-r--r-- | keystonemiddleware/auth_token/_cache.py | 5 | ||||
-rw-r--r-- | keystonemiddleware/tests/unit/auth_token/test_cache.py | 23 |
2 files changed, 27 insertions, 1 deletions
diff --git a/keystonemiddleware/auth_token/_cache.py b/keystonemiddleware/auth_token/_cache.py index b2e9036..52eb0f2 100644 --- a/keystonemiddleware/auth_token/_cache.py +++ b/keystonemiddleware/auth_token/_cache.py @@ -97,7 +97,10 @@ class _MemcacheClientPool(object): @contextlib.contextmanager def reserve(self): - with self._pool.get() as client: + # NOTE(morgan): We must use "acquire" if we want all the added context + # manager logic that places the connection back into the pool at the + # end of it's use. + with self._pool.acquire() as client: yield client diff --git a/keystonemiddleware/tests/unit/auth_token/test_cache.py b/keystonemiddleware/tests/unit/auth_token/test_cache.py index 6fa1ef2..691c429 100644 --- a/keystonemiddleware/tests/unit/auth_token/test_cache.py +++ b/keystonemiddleware/tests/unit/auth_token/test_cache.py @@ -12,8 +12,10 @@ import uuid +import fixtures import six +from keystonemiddleware.auth_token import _cache from keystonemiddleware.auth_token import _exceptions as exc from keystonemiddleware.tests.unit.auth_token import base from keystonemiddleware.tests.unit import utils @@ -150,3 +152,24 @@ class TestLiveMemcache(base.BaseAuthTokenTestCase): token_cache.initialize({}) token_cache.set(token, data) self.assertEqual(token_cache.get(token), data) + + +class TestMemcachePoolAbstraction(utils.TestCase): + def setUp(self): + super(TestMemcachePoolAbstraction, self).setUp() + self.useFixture(fixtures.MockPatch( + 'oslo_cache._memcache_pool._MemcacheClient')) + + def test_abstraction_layer_reserve_places_connection_back_in_pool(self): + cache_pool = _cache._MemcacheClientPool( + memcache_servers=[], arguments={}, maxsize=1, unused_timeout=10) + conn = None + with cache_pool.reserve() as client: + self.assertEqual(cache_pool._pool._acquired, 1) + conn = client + + self.assertEqual(cache_pool._pool._acquired, 0) + with cache_pool.reserve() as client: + # Make sure the connection we got before is in-fact the one we + # get again. + self.assertEqual(conn, client) |